<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span class="hs-pragma">{-# LANGUAGE BinaryLiterals, CPP, ScopedTypeVariables, BangPatterns #-}</span><span>
</span><span id="line-2"></span><span>
</span><span id="line-3"></span><span class="hs-comment">--</span><span>
</span><span id="line-4"></span><span class="hs-comment">--  (c) The University of Glasgow 2002-2006</span><span>
</span><span id="line-5"></span><span class="hs-comment">--</span><span>
</span><span id="line-6"></span><span>
</span><span id="line-7"></span><span class="hs-pragma">{-# OPTIONS_GHC -O2 #-}</span><span>
</span><span id="line-8"></span><span class="hs-comment">-- We always optimise this, otherwise performance of a non-optimised</span><span>
</span><span id="line-9"></span><span class="hs-comment">-- compiler is severely affected</span><span>
</span><span id="line-10"></span><span>
</span><span id="line-11"></span><span class="hs-comment">-- | Binary interface file support.</span><span>
</span><span id="line-12"></span><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">GHC.Iface.Binary</span><span> </span><span class="hs-special">(</span><span>
</span><span id="line-13"></span><span>        </span><span class="annot"><span class="hs-comment">-- * Public API for interface file serialisation</span></span><span>
</span><span id="line-14"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#writeBinIface"><span class="hs-identifier">writeBinIface</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-15"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#readBinIface"><span class="hs-identifier">readBinIface</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-16"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#readBinIface_"><span class="hs-identifier">readBinIface_</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-17"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#getSymtabName"><span class="hs-identifier">getSymtabName</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-18"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#getDictFastString"><span class="hs-identifier">getDictFastString</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-19"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#CheckHiWay"><span class="hs-identifier">CheckHiWay</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-20"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#TraceBinIFaceReading"><span class="hs-identifier">TraceBinIFaceReading</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-21"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#getWithUserData"><span class="hs-identifier">getWithUserData</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-22"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#putWithUserData"><span class="hs-identifier">putWithUserData</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-23"></span><span>
</span><span id="line-24"></span><span>        </span><span class="annot"><span class="hs-comment">-- * Internal serialisation functions</span></span><span>
</span><span id="line-25"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#getSymbolTable"><span class="hs-identifier">getSymbolTable</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-26"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#putName"><span class="hs-identifier">putName</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-27"></span><span>        </span><span class="annot"><a href="GHC.Utils.Binary.html#putDictionary"><span class="hs-identifier">putDictionary</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-28"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#putFastString"><span class="hs-identifier">putFastString</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-29"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#putSymbolTable"><span class="hs-identifier">putSymbolTable</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-30"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#BinSymbolTable"><span class="hs-identifier">BinSymbolTable</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-31"></span><span>        </span><span class="annot"><a href="GHC.Iface.Binary.html#BinDictionary"><span class="hs-identifier">BinDictionary</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><span id="line-32"></span><span>
</span><span id="line-33"></span><span>    </span><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span class="hs-cpp">

#include &quot;HsVersions.h&quot;
</span><span>
</span><span id="line-37"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Prelude.html"><span class="hs-identifier">GHC.Prelude</span></a></span><span>
</span><span id="line-38"></span><span>
</span><span id="line-39"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.Monad.html"><span class="hs-identifier">GHC.Tc.Utils.Monad</span></a></span><span>
</span><span id="line-40"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Builtin.Utils.html"><span class="hs-identifier">GHC.Builtin.Utils</span></a></span><span>   </span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.Builtin.Utils.html#isKnownKeyName"><span class="hs-identifier">isKnownKeyName</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Builtin.Utils.html#lookupKnownKeyName"><span class="hs-identifier">lookupKnownKeyName</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-41"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Iface.Env.html"><span class="hs-identifier">GHC.Iface.Env</span></a></span><span>
</span><span id="line-42"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Driver.Types.html"><span class="hs-identifier">GHC.Driver.Types</span></a></span><span>
</span><span id="line-43"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Unit.html"><span class="hs-identifier">GHC.Unit</span></a></span><span>
</span><span id="line-44"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Name.html"><span class="hs-identifier">GHC.Types.Name</span></a></span><span>
</span><span id="line-45"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html"><span class="hs-identifier">GHC.Driver.Session</span></a></span><span>
</span><span id="line-46"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Driver.Ways.html"><span class="hs-identifier">GHC.Driver.Ways</span></a></span><span>
</span><span id="line-47"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Unique.FM.html"><span class="hs-identifier">GHC.Types.Unique.FM</span></a></span><span>
</span><span id="line-48"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Unique.Supply.html"><span class="hs-identifier">GHC.Types.Unique.Supply</span></a></span><span>
</span><span id="line-49"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Panic.html"><span class="hs-identifier">GHC.Utils.Panic</span></a></span><span>
</span><span id="line-50"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html"><span class="hs-identifier">GHC.Utils.Binary</span></a></span><span> </span><span class="hs-keyword">as</span><span> </span><span class="annot"><span class="hs-identifier">Binary</span></span><span>
</span><span id="line-51"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.SrcLoc.html"><span class="hs-identifier">GHC.Types.SrcLoc</span></a></span><span>
</span><span id="line-52"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Error.html"><span class="hs-identifier">GHC.Utils.Error</span></a></span><span>
</span><span id="line-53"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Data.FastMutInt.html"><span class="hs-identifier">GHC.Data.FastMutInt</span></a></span><span>
</span><span id="line-54"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html"><span class="hs-identifier">GHC.Types.Unique</span></a></span><span>
</span><span id="line-55"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html"><span class="hs-identifier">GHC.Utils.Outputable</span></a></span><span>
</span><span id="line-56"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Name.Cache.html"><span class="hs-identifier">GHC.Types.Name.Cache</span></a></span><span>
</span><span id="line-57"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#"><span class="hs-identifier">GHC.Platform</span></a></span><span>
</span><span id="line-58"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Data.FastString.html"><span class="hs-identifier">GHC.Data.FastString</span></a></span><span>
</span><span id="line-59"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Settings.Constants.html"><span class="hs-identifier">GHC.Settings.Constants</span></a></span><span>
</span><span id="line-60"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Misc.html"><span class="hs-identifier">GHC.Utils.Misc</span></a></span><span>
</span><span id="line-61"></span><span>
</span><span id="line-62"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../containers/src/Data.Set.html#"><span class="hs-identifier">Data.Set</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../../containers/src/Data.Set.Internal.html#Set"><span class="hs-identifier">Set</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-63"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../array/src/Data.Array.html#"><span class="hs-identifier">Data.Array</span></a></span><span>
</span><span id="line-64"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../array/src/Data.Array.ST.html#"><span class="hs-identifier">Data.Array.ST</span></a></span><span>
</span><span id="line-65"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../array/src/Data.Array.Unsafe.html#"><span class="hs-identifier">Data.Array.Unsafe</span></a></span><span>
</span><span id="line-66"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../base/src/Data.Bits.html#"><span class="hs-identifier">Data.Bits</span></a></span><span>
</span><span id="line-67"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../base/src/Data.Char.html#"><span class="hs-identifier">Data.Char</span></a></span><span>
</span><span id="line-68"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../base/src/Data.Word.html#"><span class="hs-identifier">Data.Word</span></a></span><span>
</span><span id="line-69"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../base/src/Data.IORef.html#"><span class="hs-identifier">Data.IORef</span></a></span><span>
</span><span id="line-70"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../base/src/Data.Foldable.html#"><span class="hs-identifier">Data.Foldable</span></a></span><span>
</span><span id="line-71"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../base/src/Control.Monad.html#"><span class="hs-identifier">Control.Monad</span></a></span><span>
</span><span id="line-72"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../base/src/Control.Monad.ST.html#"><span class="hs-identifier">Control.Monad.ST</span></a></span><span>
</span><span id="line-73"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../transformers/src/Control.Monad.Trans.Class.html#"><span class="hs-identifier">Control.Monad.Trans.Class</span></a></span><span>
</span><span id="line-74"></span><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><span class="annot"><a href="../../transformers/src/Control.Monad.Trans.State.Strict.html#"><span class="hs-identifier">Control.Monad.Trans.State.Strict</span></a></span><span> </span><span class="hs-keyword">as</span><span> </span><span class="annot"><span class="hs-identifier">State</span></span><span>
</span><span id="line-75"></span><span>
</span><span id="line-76"></span><span class="hs-comment">-- ---------------------------------------------------------------------------</span><span>
</span><span id="line-77"></span><span class="hs-comment">-- Reading and writing binary interface files</span><span>
</span><span id="line-78"></span><span class="hs-comment">--</span><span>
</span><span id="line-79"></span><span>
</span><span id="line-80"></span><span class="hs-keyword">data</span><span> </span><span id="CheckHiWay"><span class="annot"><a href="GHC.Iface.Binary.html#CheckHiWay"><span class="hs-identifier hs-var">CheckHiWay</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="CheckHiWay"><span class="annot"><a href="GHC.Iface.Binary.html#CheckHiWay"><span class="hs-identifier hs-var">CheckHiWay</span></a></span></span><span> </span><span class="hs-glyph">|</span><span> </span><span id="IgnoreHiWay"><span class="annot"><a href="GHC.Iface.Binary.html#IgnoreHiWay"><span class="hs-identifier hs-var">IgnoreHiWay</span></a></span></span><span>
</span><span id="line-81"></span><span>    </span><span class="hs-keyword">deriving</span><span> </span><span id="local-6989586621681090850"><span id="local-6989586621681090852"><span class="annot"><span class="annottext">CheckHiWay -&gt; CheckHiWay -&gt; Bool
(CheckHiWay -&gt; CheckHiWay -&gt; Bool)
-&gt; (CheckHiWay -&gt; CheckHiWay -&gt; Bool) -&gt; Eq CheckHiWay
forall a. (a -&gt; a -&gt; Bool) -&gt; (a -&gt; a -&gt; Bool) -&gt; Eq a
/= :: CheckHiWay -&gt; CheckHiWay -&gt; Bool
$c/= :: CheckHiWay -&gt; CheckHiWay -&gt; Bool
== :: CheckHiWay -&gt; CheckHiWay -&gt; Bool
$c== :: CheckHiWay -&gt; CheckHiWay -&gt; Bool
</span><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var">Eq</span></span></span></span><span>
</span><span id="line-82"></span><span>
</span><span id="line-83"></span><span class="hs-keyword">data</span><span> </span><span id="TraceBinIFaceReading"><span class="annot"><a href="GHC.Iface.Binary.html#TraceBinIFaceReading"><span class="hs-identifier hs-var">TraceBinIFaceReading</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="TraceBinIFaceReading"><span class="annot"><a href="GHC.Iface.Binary.html#TraceBinIFaceReading"><span class="hs-identifier hs-var">TraceBinIFaceReading</span></a></span></span><span> </span><span class="hs-glyph">|</span><span> </span><span id="QuietBinIFaceReading"><span class="annot"><a href="GHC.Iface.Binary.html#QuietBinIFaceReading"><span class="hs-identifier hs-var">QuietBinIFaceReading</span></a></span></span><span>
</span><span id="line-84"></span><span>    </span><span class="hs-keyword">deriving</span><span> </span><span id="local-6989586621681090843"><span id="local-6989586621681090845"><span class="annot"><span class="annottext">TraceBinIFaceReading -&gt; TraceBinIFaceReading -&gt; Bool
(TraceBinIFaceReading -&gt; TraceBinIFaceReading -&gt; Bool)
-&gt; (TraceBinIFaceReading -&gt; TraceBinIFaceReading -&gt; Bool)
-&gt; Eq TraceBinIFaceReading
forall a. (a -&gt; a -&gt; Bool) -&gt; (a -&gt; a -&gt; Bool) -&gt; Eq a
/= :: TraceBinIFaceReading -&gt; TraceBinIFaceReading -&gt; Bool
$c/= :: TraceBinIFaceReading -&gt; TraceBinIFaceReading -&gt; Bool
== :: TraceBinIFaceReading -&gt; TraceBinIFaceReading -&gt; Bool
$c== :: TraceBinIFaceReading -&gt; TraceBinIFaceReading -&gt; Bool
</span><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var">Eq</span></span></span></span><span>
</span><span id="line-85"></span><span>
</span><span id="line-86"></span><span class="hs-comment">-- | Read an interface file</span><span>
</span><span id="line-87"></span><span id="local-6989586621681091227"><span id="local-6989586621681091228"><span class="annot"><a href="GHC.Iface.Binary.html#readBinIface"><span class="hs-identifier hs-type">readBinIface</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Iface.Binary.html#CheckHiWay"><span class="hs-identifier hs-type">CheckHiWay</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Iface.Binary.html#TraceBinIFaceReading"><span class="hs-identifier hs-type">TraceBinIFaceReading</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.IO.html#FilePath"><span class="hs-identifier hs-type">FilePath</span></a></span><span>
</span><span id="line-88"></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.html#TcRnIf"><span class="hs-identifier hs-type">TcRnIf</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681091228"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681091227"><span class="hs-identifier hs-type">b</span></a></span><span> </span><span class="annot"><a href="GHC.Driver.Types.html#ModIface"><span class="hs-identifier hs-type">ModIface</span></a></span></span></span><span>
</span><span id="line-89"></span><span id="readBinIface"><span class="annot"><span class="annottext">readBinIface :: forall a b.
CheckHiWay -&gt; TraceBinIFaceReading -&gt; String -&gt; TcRnIf a b ModIface
</span><a href="GHC.Iface.Binary.html#readBinIface"><span class="hs-identifier hs-var hs-var">readBinIface</span></a></span></span><span> </span><span id="local-6989586621681090832"><span class="annot"><span class="annottext">CheckHiWay
</span><a href="#local-6989586621681090832"><span class="hs-identifier hs-var">checkHiWay</span></a></span></span><span> </span><span id="local-6989586621681090831"><span class="annot"><span class="annottext">TraceBinIFaceReading
</span><a href="#local-6989586621681090831"><span class="hs-identifier hs-var">traceBinIFaceReading</span></a></span></span><span> </span><span id="local-6989586621681090830"><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090830"><span class="hs-identifier hs-var">hi_path</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-90"></span><span>    </span><span id="local-6989586621681090829"><span class="annot"><span class="annottext">NameCacheUpdater
</span><a href="#local-6989586621681090829"><span class="hs-identifier hs-var">ncu</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">TcRnIf a b NameCacheUpdater
forall a b. TcRnIf a b NameCacheUpdater
</span><a href="GHC.Iface.Env.html#mkNameCacheUpdater"><span class="hs-identifier hs-var">mkNameCacheUpdater</span></a></span><span>
</span><span id="line-91"></span><span>    </span><span id="local-6989586621681090827"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681090827"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">IOEnv (Env a b) DynFlags
forall (m :: * -&gt; *). HasDynFlags m =&gt; m DynFlags
</span><a href="GHC.Driver.Session.html#getDynFlags"><span class="hs-identifier hs-var">getDynFlags</span></a></span><span>
</span><span id="line-92"></span><span>    </span><span class="annot"><span class="annottext">IO ModIface -&gt; TcRnIf a b ModIface
forall (m :: * -&gt; *) a. MonadIO m =&gt; IO a -&gt; m a
</span><a href="../../base/src/Control.Monad.IO.Class.html#liftIO"><span class="hs-identifier hs-var">liftIO</span></a></span><span> </span><span class="annot"><span class="annottext">(IO ModIface -&gt; TcRnIf a b ModIface)
-&gt; IO ModIface -&gt; TcRnIf a b ModIface
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
-&gt; CheckHiWay
-&gt; TraceBinIFaceReading
-&gt; String
-&gt; NameCacheUpdater
-&gt; IO ModIface
</span><a href="GHC.Iface.Binary.html#readBinIface_"><span class="hs-identifier hs-var">readBinIface_</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681090827"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">CheckHiWay
</span><a href="#local-6989586621681090832"><span class="hs-identifier hs-var">checkHiWay</span></a></span><span> </span><span class="annot"><span class="annottext">TraceBinIFaceReading
</span><a href="#local-6989586621681090831"><span class="hs-identifier hs-var">traceBinIFaceReading</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090830"><span class="hs-identifier hs-var">hi_path</span></a></span><span> </span><span class="annot"><span class="annottext">NameCacheUpdater
</span><a href="#local-6989586621681090829"><span class="hs-identifier hs-var">ncu</span></a></span><span>
</span><span id="line-93"></span><span>
</span><span id="line-94"></span><span class="hs-comment">-- | Read an interface file in 'IO'.</span><span>
</span><span id="line-95"></span><span class="annot"><a href="GHC.Iface.Binary.html#readBinIface_"><span class="hs-identifier hs-type">readBinIface_</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Iface.Binary.html#CheckHiWay"><span class="hs-identifier hs-type">CheckHiWay</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Iface.Binary.html#TraceBinIFaceReading"><span class="hs-identifier hs-type">TraceBinIFaceReading</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.IO.html#FilePath"><span class="hs-identifier hs-type">FilePath</span></a></span><span>
</span><span id="line-96"></span><span>              </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Iface.Env.html#NameCacheUpdater"><span class="hs-identifier hs-type">NameCacheUpdater</span></a></span><span>
</span><span id="line-97"></span><span>              </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="annot"><a href="GHC.Driver.Types.html#ModIface"><span class="hs-identifier hs-type">ModIface</span></a></span><span>
</span><span id="line-98"></span><span id="readBinIface_"><span class="annot"><span class="annottext">readBinIface_ :: DynFlags
-&gt; CheckHiWay
-&gt; TraceBinIFaceReading
-&gt; String
-&gt; NameCacheUpdater
-&gt; IO ModIface
</span><a href="GHC.Iface.Binary.html#readBinIface_"><span class="hs-identifier hs-var hs-var">readBinIface_</span></a></span></span><span> </span><span id="local-6989586621681090824"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681090824"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681090823"><span class="annot"><span class="annottext">CheckHiWay
</span><a href="#local-6989586621681090823"><span class="hs-identifier hs-var">checkHiWay</span></a></span></span><span> </span><span id="local-6989586621681090822"><span class="annot"><span class="annottext">TraceBinIFaceReading
</span><a href="#local-6989586621681090822"><span class="hs-identifier hs-var">traceBinIFaceReading</span></a></span></span><span> </span><span id="local-6989586621681090821"><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090821"><span class="hs-identifier hs-var">hi_path</span></a></span></span><span> </span><span id="local-6989586621681090820"><span class="annot"><span class="annottext">NameCacheUpdater
</span><a href="#local-6989586621681090820"><span class="hs-identifier hs-var">ncu</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-99"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681090819"><span class="annot"><span class="annottext">platform :: Platform
</span><a href="#local-6989586621681090819"><span class="hs-identifier hs-var hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; Platform
</span><a href="GHC.Driver.Session.html#targetPlatform"><span class="hs-identifier hs-var hs-var">targetPlatform</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681090824"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-100"></span><span>
</span><span id="line-101"></span><span>        </span><span class="annot"><a href="#local-6989586621681090817"><span class="hs-identifier hs-type">printer</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#SDoc"><span class="hs-identifier hs-type">SDoc</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><span id="line-102"></span><span>        </span><span id="local-6989586621681090817"><span class="annot"><span class="annottext">printer :: SDoc -&gt; IO ()
</span><a href="#local-6989586621681090817"><span class="hs-identifier hs-var hs-var">printer</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">TraceBinIFaceReading
</span><a href="#local-6989586621681090822"><span class="hs-identifier hs-var">traceBinIFaceReading</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-103"></span><span>                      </span><span class="annot"><span class="annottext">TraceBinIFaceReading
</span><a href="GHC.Iface.Binary.html#TraceBinIFaceReading"><span class="hs-identifier hs-var">TraceBinIFaceReading</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-glyph">\</span><span id="local-6989586621681090816"><span class="annot"><span class="annottext">SDoc
</span><a href="#local-6989586621681090816"><span class="hs-identifier hs-var">sd</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-104"></span><span>                          </span><span class="annot"><span class="annottext">DynFlags -&gt; WarnReason -&gt; Severity -&gt; SrcSpan -&gt; SDoc -&gt; IO ()
</span><a href="GHC.Driver.Session.html#putLogMsg"><span class="hs-identifier hs-var">putLogMsg</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681090824"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-105"></span><span>                                    </span><span class="annot"><span class="annottext">WarnReason
</span><a href="GHC.Driver.Flags.html#NoReason"><span class="hs-identifier hs-var">NoReason</span></a></span><span>
</span><span id="line-106"></span><span>                                    </span><span class="annot"><span class="annottext">Severity
</span><a href="GHC.Utils.Error.html#SevOutput"><span class="hs-identifier hs-var">SevOutput</span></a></span><span>
</span><span id="line-107"></span><span>                                    </span><span class="annot"><span class="annottext">SrcSpan
</span><a href="GHC.Types.SrcLoc.html#noSrcSpan"><span class="hs-identifier hs-var">noSrcSpan</span></a></span><span>
</span><span id="line-108"></span><span>                                    </span><span class="annot"><span class="annottext">(SDoc -&gt; IO ()) -&gt; SDoc -&gt; IO ()
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">PprStyle -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#withPprStyle"><span class="hs-identifier hs-var">withPprStyle</span></a></span><span> </span><span class="annot"><span class="annottext">PprStyle
</span><a href="GHC.Utils.Outputable.html#defaultDumpStyle"><span class="hs-identifier hs-var">defaultDumpStyle</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="#local-6989586621681090816"><span class="hs-identifier hs-var">sd</span></a></span><span>
</span><span id="line-109"></span><span>                      </span><span class="annot"><span class="annottext">TraceBinIFaceReading
</span><a href="GHC.Iface.Binary.html#QuietBinIFaceReading"><span class="hs-identifier hs-var">QuietBinIFaceReading</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-glyph">\</span><span class="annot"><span class="annottext">SDoc
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">() -&gt; IO ()
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><span id="line-110"></span><span>
</span><span id="line-111"></span><span>        </span><span id="local-6989586621681091195"><span class="annot"><a href="#local-6989586621681090809"><span class="hs-identifier hs-type">wantedGot</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/GHC.Base.html#String"><span class="hs-identifier hs-type">String</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621681091195"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621681091195"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621681091195"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#SDoc"><span class="hs-identifier hs-type">SDoc</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span></span><span>
</span><span id="line-112"></span><span>        </span><span id="local-6989586621681090809"><span class="annot"><span class="annottext">wantedGot :: forall a. String -&gt; a -&gt; a -&gt; (a -&gt; SDoc) -&gt; IO ()
</span><a href="#local-6989586621681090809"><span class="hs-identifier hs-var hs-var">wantedGot</span></a></span></span><span> </span><span id="local-6989586621681090808"><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090808"><span class="hs-identifier hs-var">what</span></a></span></span><span> </span><span id="local-6989586621681090807"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681090807"><span class="hs-identifier hs-var">wanted</span></a></span></span><span> </span><span id="local-6989586621681090806"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681090806"><span class="hs-identifier hs-var">got</span></a></span></span><span> </span><span id="local-6989586621681090805"><span class="annot"><span class="annottext">a -&gt; SDoc
</span><a href="#local-6989586621681090805"><span class="hs-identifier hs-var">ppr'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-113"></span><span>            </span><span class="annot"><span class="annottext">SDoc -&gt; IO ()
</span><a href="#local-6989586621681090817"><span class="hs-identifier hs-var">printer</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090808"><span class="hs-identifier hs-var">what</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;: &quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span>
</span><span id="line-114"></span><span>                     </span><span class="annot"><span class="annottext">[SDoc] -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#vcat"><span class="hs-identifier hs-var">vcat</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;Wanted &quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">a -&gt; SDoc
</span><a href="#local-6989586621681090805"><span class="hs-identifier hs-var">ppr'</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681090807"><span class="hs-identifier hs-var">wanted</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;,&quot;</span></span><span class="hs-special">,</span><span>
</span><span id="line-115"></span><span>                           </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;got    &quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">a -&gt; SDoc
</span><a href="#local-6989586621681090805"><span class="hs-identifier hs-var">ppr'</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681090806"><span class="hs-identifier hs-var">got</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-116"></span><span>
</span><span id="line-117"></span><span>        </span><span id="local-6989586621681091193"><span class="annot"><a href="#local-6989586621681090801"><span class="hs-identifier hs-type">errorOnMismatch</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">Eq</span></span><span> </span><span class="annot"><a href="#local-6989586621681091193"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../../base/src/GHC.Show.html#Show"><span class="hs-identifier hs-type">Show</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681091193"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Base.html#String"><span class="hs-identifier hs-type">String</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621681091193"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621681091193"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span></span><span>
</span><span id="line-118"></span><span>        </span><span id="local-6989586621681090801"><span class="annot"><span class="annottext">errorOnMismatch :: forall a. (Eq a, Show a) =&gt; String -&gt; a -&gt; a -&gt; IO ()
</span><a href="#local-6989586621681090801"><span class="hs-identifier hs-var hs-var">errorOnMismatch</span></a></span></span><span> </span><span id="local-6989586621681090794"><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090794"><span class="hs-identifier hs-var">what</span></a></span></span><span> </span><span id="local-6989586621681090793"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681090793"><span class="hs-identifier hs-var">wanted</span></a></span></span><span> </span><span id="local-6989586621681090792"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681090792"><span class="hs-identifier hs-var">got</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-119"></span><span>            </span><span class="hs-comment">-- This will be caught by readIface which will emit an error</span><span>
</span><span id="line-120"></span><span>            </span><span class="hs-comment">-- msg containing the iface module name.</span><span>
</span><span id="line-121"></span><span>            </span><span class="annot"><span class="annottext">Bool -&gt; IO () -&gt; IO ()
forall (f :: * -&gt; *). Applicative f =&gt; Bool -&gt; f () -&gt; f ()
</span><a href="../../base/src/GHC.Base.html#when"><span class="hs-identifier hs-var">when</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681090793"><span class="hs-identifier hs-var">wanted</span></a></span><span> </span><span class="annot"><span class="annottext">a -&gt; a -&gt; Bool
forall a. Eq a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">/=</span></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681090792"><span class="hs-identifier hs-var">got</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">(IO () -&gt; IO ()) -&gt; IO () -&gt; IO ()
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">GhcException -&gt; IO ()
forall a. GhcException -&gt; IO a
</span><a href="GHC.Utils.Panic.html#throwGhcExceptionIO"><span class="hs-identifier hs-var">throwGhcExceptionIO</span></a></span><span> </span><span class="annot"><span class="annottext">(GhcException -&gt; IO ()) -&gt; GhcException -&gt; IO ()
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; GhcException
</span><a href="GHC.Utils.Panic.html#ProgramError"><span class="hs-identifier hs-var">ProgramError</span></a></span><span>
</span><span id="line-122"></span><span>                         </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090794"><span class="hs-identifier hs-var">what</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; String -&gt; String
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot; (wanted &quot;</span></span><span> </span><span class="annot"><span class="annottext">String -&gt; String -&gt; String
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="annot"><span class="annottext">a -&gt; String
forall a. Show a =&gt; a -&gt; String
</span><a href="../../base/src/GHC.Show.html#show"><span class="hs-identifier hs-var">show</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681090793"><span class="hs-identifier hs-var">wanted</span></a></span><span>
</span><span id="line-123"></span><span>                               </span><span class="annot"><span class="annottext">String -&gt; String -&gt; String
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;, got &quot;</span></span><span>    </span><span class="annot"><span class="annottext">String -&gt; String -&gt; String
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="annot"><span class="annottext">a -&gt; String
forall a. Show a =&gt; a -&gt; String
</span><a href="../../base/src/GHC.Show.html#show"><span class="hs-identifier hs-var">show</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681090792"><span class="hs-identifier hs-var">got</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; String -&gt; String
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;)&quot;</span></span><span class="hs-special">)</span><span>
</span><span id="line-124"></span><span>    </span><span id="local-6989586621681090786"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090786"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">String -&gt; IO BinHandle
</span><a href="GHC.Utils.Binary.html#readBinMem"><span class="hs-identifier hs-var">Binary.readBinMem</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090821"><span class="hs-identifier hs-var">hi_path</span></a></span><span>
</span><span id="line-125"></span><span>
</span><span id="line-126"></span><span>    </span><span class="hs-comment">-- Read the magic number to check that this really is a GHC .hi file</span><span>
</span><span id="line-127"></span><span>    </span><span class="hs-comment">-- (This magic number does not change when we change</span><span>
</span><span id="line-128"></span><span>    </span><span class="hs-comment">--  GHC interface file format)</span><span>
</span><span id="line-129"></span><span>    </span><span id="local-6989586621681090784"><span class="annot"><span class="annottext">FixedLengthEncoding Word32
</span><a href="#local-6989586621681090784"><span class="hs-identifier hs-var">magic</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO (FixedLengthEncoding Word32)
forall a. Binary a =&gt; BinHandle -&gt; IO a
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var">get</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090786"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-130"></span><span>    </span><span class="annot"><span class="annottext">String
-&gt; FixedLengthEncoding Word32
-&gt; FixedLengthEncoding Word32
-&gt; (FixedLengthEncoding Word32 -&gt; SDoc)
-&gt; IO ()
forall a. String -&gt; a -&gt; a -&gt; (a -&gt; SDoc) -&gt; IO ()
</span><a href="#local-6989586621681090809"><span class="hs-identifier hs-var">wantedGot</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;Magic&quot;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; FixedLengthEncoding Word32
</span><a href="GHC.Iface.Binary.html#binaryInterfaceMagic"><span class="hs-identifier hs-var">binaryInterfaceMagic</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681090819"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">FixedLengthEncoding Word32
</span><a href="#local-6989586621681090784"><span class="hs-identifier hs-var">magic</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Word32 -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">(Word32 -&gt; SDoc)
-&gt; (FixedLengthEncoding Word32 -&gt; Word32)
-&gt; FixedLengthEncoding Word32
-&gt; SDoc
forall b c a. (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c
</span><a href="../../base/src/GHC.Base.html#."><span class="hs-operator hs-var">.</span></a></span><span> </span><span class="annot"><span class="annottext">FixedLengthEncoding Word32 -&gt; Word32
forall a. FixedLengthEncoding a -&gt; a
</span><a href="GHC.Utils.Binary.html#unFixedLength"><span class="hs-identifier hs-var hs-var">unFixedLength</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-131"></span><span>    </span><span class="annot"><span class="annottext">String -&gt; Word32 -&gt; Word32 -&gt; IO ()
forall a. (Eq a, Show a) =&gt; String -&gt; a -&gt; a -&gt; IO ()
</span><a href="#local-6989586621681090801"><span class="hs-identifier hs-var">errorOnMismatch</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;magic number mismatch: old/corrupt interface file?&quot;</span></span><span>
</span><span id="line-132"></span><span>        </span><span class="hs-special">(</span><span class="annot"><span class="annottext">FixedLengthEncoding Word32 -&gt; Word32
forall a. FixedLengthEncoding a -&gt; a
</span><a href="GHC.Utils.Binary.html#unFixedLength"><span class="hs-identifier hs-var hs-var">unFixedLength</span></a></span><span> </span><span class="annot"><span class="annottext">(FixedLengthEncoding Word32 -&gt; Word32)
-&gt; FixedLengthEncoding Word32 -&gt; Word32
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Platform -&gt; FixedLengthEncoding Word32
</span><a href="GHC.Iface.Binary.html#binaryInterfaceMagic"><span class="hs-identifier hs-var">binaryInterfaceMagic</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681090819"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">FixedLengthEncoding Word32 -&gt; Word32
forall a. FixedLengthEncoding a -&gt; a
</span><a href="GHC.Utils.Binary.html#unFixedLength"><span class="hs-identifier hs-var hs-var">unFixedLength</span></a></span><span> </span><span class="annot"><span class="annottext">FixedLengthEncoding Word32
</span><a href="#local-6989586621681090784"><span class="hs-identifier hs-var">magic</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-133"></span><span>
</span><span id="line-134"></span><span>    </span><span class="hs-comment">-- Check the interface file version and ways.</span><span>
</span><span id="line-135"></span><span>    </span><span id="local-6989586621681090778"><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090778"><span class="hs-identifier hs-var">check_ver</span></a></span></span><span>  </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO String
forall a. Binary a =&gt; BinHandle -&gt; IO a
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var">get</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090786"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-136"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681090776"><span class="annot"><span class="annottext">our_ver :: String
</span><a href="#local-6989586621681090776"><span class="hs-identifier hs-var hs-var">our_ver</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Integer -&gt; String
forall a. Show a =&gt; a -&gt; String
</span><a href="../../base/src/GHC.Show.html#show"><span class="hs-identifier hs-var">show</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><a href="GHC.Settings.Constants.html#hiVersion"><span class="hs-identifier hs-var">hiVersion</span></a></span><span>
</span><span id="line-137"></span><span>    </span><span class="annot"><span class="annottext">String -&gt; String -&gt; String -&gt; (String -&gt; SDoc) -&gt; IO ()
forall a. String -&gt; a -&gt; a -&gt; (a -&gt; SDoc) -&gt; IO ()
</span><a href="#local-6989586621681090809"><span class="hs-identifier hs-var">wantedGot</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;Version&quot;</span></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090776"><span class="hs-identifier hs-var">our_ver</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090778"><span class="hs-identifier hs-var">check_ver</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span>
</span><span id="line-138"></span><span>    </span><span class="annot"><span class="annottext">String -&gt; String -&gt; String -&gt; IO ()
forall a. (Eq a, Show a) =&gt; String -&gt; a -&gt; a -&gt; IO ()
</span><a href="#local-6989586621681090801"><span class="hs-identifier hs-var">errorOnMismatch</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;mismatched interface file versions&quot;</span></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090776"><span class="hs-identifier hs-var">our_ver</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090778"><span class="hs-identifier hs-var">check_ver</span></a></span><span>
</span><span id="line-139"></span><span>
</span><span id="line-140"></span><span>    </span><span id="local-6989586621681090774"><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090774"><span class="hs-identifier hs-var">check_way</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO String
forall a. Binary a =&gt; BinHandle -&gt; IO a
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var">get</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090786"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-141"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681090773"><span class="annot"><span class="annottext">way_descr :: String
</span><a href="#local-6989586621681090773"><span class="hs-identifier hs-var hs-var">way_descr</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Set Way -&gt; String
</span><a href="GHC.Iface.Binary.html#getWayDescr"><span class="hs-identifier hs-var">getWayDescr</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681090819"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; Set Way
</span><a href="GHC.Driver.Session.html#ways"><span class="hs-identifier hs-var hs-var">ways</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681090824"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-142"></span><span>    </span><span class="annot"><span class="annottext">String -&gt; String -&gt; String -&gt; (String -&gt; SDoc) -&gt; IO ()
forall a. String -&gt; a -&gt; a -&gt; (a -&gt; SDoc) -&gt; IO ()
</span><a href="#local-6989586621681090809"><span class="hs-identifier hs-var">wantedGot</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;Way&quot;</span></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090773"><span class="hs-identifier hs-var">way_descr</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090774"><span class="hs-identifier hs-var">check_way</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span>
</span><span id="line-143"></span><span>    </span><span class="annot"><span class="annottext">Bool -&gt; IO () -&gt; IO ()
forall (f :: * -&gt; *). Applicative f =&gt; Bool -&gt; f () -&gt; f ()
</span><a href="../../base/src/GHC.Base.html#when"><span class="hs-identifier hs-var">when</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CheckHiWay
</span><a href="#local-6989586621681090823"><span class="hs-identifier hs-var">checkHiWay</span></a></span><span> </span><span class="annot"><span class="annottext">CheckHiWay -&gt; CheckHiWay -&gt; Bool
forall a. Eq a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">==</span></span><span> </span><span class="annot"><span class="annottext">CheckHiWay
</span><a href="GHC.Iface.Binary.html#CheckHiWay"><span class="hs-identifier hs-var">CheckHiWay</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">(IO () -&gt; IO ()) -&gt; IO () -&gt; IO ()
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span>
</span><span id="line-144"></span><span>        </span><span class="annot"><span class="annottext">String -&gt; String -&gt; String -&gt; IO ()
forall a. (Eq a, Show a) =&gt; String -&gt; a -&gt; a -&gt; IO ()
</span><a href="#local-6989586621681090801"><span class="hs-identifier hs-var">errorOnMismatch</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;mismatched interface file ways&quot;</span></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090773"><span class="hs-identifier hs-var">way_descr</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090774"><span class="hs-identifier hs-var">check_way</span></a></span><span>
</span><span id="line-145"></span><span>
</span><span id="line-146"></span><span>    </span><span id="local-6989586621681090770"><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090770"><span class="hs-identifier hs-var">extFields_p</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO (Bin Any)
forall a. Binary a =&gt; BinHandle -&gt; IO a
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var">get</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090786"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-147"></span><span>
</span><span id="line-148"></span><span>    </span><span id="local-6989586621681090769"><span class="annot"><span class="annottext">ModIface
</span><a href="#local-6989586621681090769"><span class="hs-identifier hs-var">mod_iface</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NameCacheUpdater -&gt; BinHandle -&gt; IO ModIface
forall a. Binary a =&gt; NameCacheUpdater -&gt; BinHandle -&gt; IO a
</span><a href="GHC.Iface.Binary.html#getWithUserData"><span class="hs-identifier hs-var">getWithUserData</span></a></span><span> </span><span class="annot"><span class="annottext">NameCacheUpdater
</span><a href="#local-6989586621681090820"><span class="hs-identifier hs-var">ncu</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090786"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-149"></span><span>
</span><span id="line-150"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Bin Any -&gt; IO ()
forall {k} (a :: k). BinHandle -&gt; Bin a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#seekBin"><span class="hs-identifier hs-var">seekBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090786"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090770"><span class="hs-identifier hs-var">extFields_p</span></a></span><span>
</span><span id="line-151"></span><span>    </span><span id="local-6989586621681090767"><span class="annot"><span class="annottext">ExtensibleFields
</span><a href="#local-6989586621681090767"><span class="hs-identifier hs-var">extFields</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO ExtensibleFields
forall a. Binary a =&gt; BinHandle -&gt; IO a
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var">get</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090786"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-152"></span><span>
</span><span id="line-153"></span><span>    </span><span class="annot"><span class="annottext">ModIface -&gt; IO ModIface
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">ModIface
</span><a href="#local-6989586621681090769"><span class="hs-identifier hs-var">mod_iface</span></a></span><span class="hs-special">{</span><span class="annot"><span class="annottext">mi_ext_fields :: ExtensibleFields
</span><a href="GHC.Driver.Types.html#mi_ext_fields"><span class="hs-identifier hs-var">mi_ext_fields</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">ExtensibleFields
</span><a href="#local-6989586621681090767"><span class="hs-identifier hs-var">extFields</span></a></span><span class="hs-special">}</span><span>
</span><span id="line-154"></span><span>
</span><span id="line-155"></span><span>
</span><span id="line-156"></span><span class="hs-comment">-- | This performs a get action after reading the dictionary and symbol</span><span>
</span><span id="line-157"></span><span class="hs-comment">-- table. It is necessary to run this before trying to deserialise any</span><span>
</span><span id="line-158"></span><span class="hs-comment">-- Names or FastStrings.</span><span>
</span><span id="line-159"></span><span id="local-6989586621681091177"><span class="annot"><a href="GHC.Iface.Binary.html#getWithUserData"><span class="hs-identifier hs-type">getWithUserData</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#Binary"><span class="hs-identifier hs-type">Binary</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681091177"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="annot"><a href="GHC.Iface.Env.html#NameCacheUpdater"><span class="hs-identifier hs-type">NameCacheUpdater</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#BinHandle"><span class="hs-identifier hs-type">BinHandle</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="annot"><a href="#local-6989586621681091177"><span class="hs-identifier hs-type">a</span></a></span></span><span>
</span><span id="line-160"></span><span id="getWithUserData"><span class="annot"><span class="annottext">getWithUserData :: forall a. Binary a =&gt; NameCacheUpdater -&gt; BinHandle -&gt; IO a
</span><a href="GHC.Iface.Binary.html#getWithUserData"><span class="hs-identifier hs-var hs-var">getWithUserData</span></a></span></span><span> </span><span id="local-6989586621681090745"><span class="annot"><span class="annottext">NameCacheUpdater
</span><a href="#local-6989586621681090745"><span class="hs-identifier hs-var">ncu</span></a></span></span><span> </span><span id="local-6989586621681090744"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090744"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-161"></span><span>    </span><span class="hs-comment">-- Read the dictionary</span><span>
</span><span id="line-162"></span><span>    </span><span class="hs-comment">-- The next word in the file is a pointer to where the dictionary is</span><span>
</span><span id="line-163"></span><span>    </span><span class="hs-comment">-- (probably at the end of the file)</span><span>
</span><span id="line-164"></span><span>    </span><span id="local-6989586621681090743"><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090743"><span class="hs-identifier hs-var">dict_p</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO (Bin Any)
forall a. Binary a =&gt; BinHandle -&gt; IO a
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var">Binary.get</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090744"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-165"></span><span>    </span><span id="local-6989586621681090742"><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090742"><span class="hs-identifier hs-var">data_p</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO (Bin Any)
forall {k} (a :: k). BinHandle -&gt; IO (Bin a)
</span><a href="GHC.Utils.Binary.html#tellBin"><span class="hs-identifier hs-var">tellBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090744"><span class="hs-identifier hs-var">bh</span></a></span><span>          </span><span class="hs-comment">-- Remember where we are now</span><span>
</span><span id="line-166"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Bin Any -&gt; IO ()
forall {k} (a :: k). BinHandle -&gt; Bin a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#seekBin"><span class="hs-identifier hs-var">seekBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090744"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090743"><span class="hs-identifier hs-var">dict_p</span></a></span><span>
</span><span id="line-167"></span><span>    </span><span id="local-6989586621681090740"><span class="annot"><span class="annottext">Dictionary
</span><a href="#local-6989586621681090740"><span class="hs-identifier hs-var">dict</span></a></span></span><span>   </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO Dictionary
</span><a href="GHC.Utils.Binary.html#getDictionary"><span class="hs-identifier hs-var">getDictionary</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090744"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-168"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Bin Any -&gt; IO ()
forall {k} (a :: k). BinHandle -&gt; Bin a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#seekBin"><span class="hs-identifier hs-var">seekBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090744"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090742"><span class="hs-identifier hs-var">data_p</span></a></span><span>             </span><span class="hs-comment">-- Back to where we were before</span><span>
</span><span id="line-169"></span><span>
</span><span id="line-170"></span><span>    </span><span class="hs-comment">-- Initialise the user-data field of bh</span><span>
</span><span id="line-171"></span><span>    </span><span id="local-6989586621681090738"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090738"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-172"></span><span>        </span><span id="local-6989586621681090737"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090737"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO BinHandle
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(BinHandle -&gt; IO BinHandle) -&gt; BinHandle -&gt; IO BinHandle
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; UserData -&gt; BinHandle
</span><a href="GHC.Utils.Binary.html#setUserData"><span class="hs-identifier hs-var">setUserData</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090744"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">(UserData -&gt; BinHandle) -&gt; UserData -&gt; BinHandle
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">(BinHandle -&gt; IO Name) -&gt; (BinHandle -&gt; IO FastString) -&gt; UserData
</span><a href="GHC.Utils.Binary.html#newReadState"><span class="hs-identifier hs-var">newReadState</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String -&gt; BinHandle -&gt; IO Name
forall a. HasCallStack =&gt; String -&gt; a
</span><a href="../../base/src/GHC.Err.html#error"><span class="hs-identifier hs-var">error</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;getSymtabName&quot;</span></span><span class="hs-special">)</span><span>
</span><span id="line-173"></span><span>                                                     </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Dictionary -&gt; BinHandle -&gt; IO FastString
</span><a href="GHC.Iface.Binary.html#getDictFastString"><span class="hs-identifier hs-var">getDictFastString</span></a></span><span> </span><span class="annot"><span class="annottext">Dictionary
</span><a href="#local-6989586621681090740"><span class="hs-identifier hs-var">dict</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-174"></span><span>        </span><span id="local-6989586621681090733"><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090733"><span class="hs-identifier hs-var">symtab_p</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO (Bin Any)
forall a. Binary a =&gt; BinHandle -&gt; IO a
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var">Binary.get</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090737"><span class="hs-identifier hs-var">bh</span></a></span><span>     </span><span class="hs-comment">-- Get the symtab ptr</span><span>
</span><span id="line-175"></span><span>        </span><span id="local-6989586621681090732"><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090732"><span class="hs-identifier hs-var">data_p</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO (Bin Any)
forall {k} (a :: k). BinHandle -&gt; IO (Bin a)
</span><a href="GHC.Utils.Binary.html#tellBin"><span class="hs-identifier hs-var">tellBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090737"><span class="hs-identifier hs-var">bh</span></a></span><span>          </span><span class="hs-comment">-- Remember where we are now</span><span>
</span><span id="line-176"></span><span>        </span><span class="annot"><span class="annottext">BinHandle -&gt; Bin Any -&gt; IO ()
forall {k} (a :: k). BinHandle -&gt; Bin a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#seekBin"><span class="hs-identifier hs-var">seekBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090737"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090733"><span class="hs-identifier hs-var">symtab_p</span></a></span><span>
</span><span id="line-177"></span><span>        </span><span id="local-6989586621681090731"><span class="annot"><span class="annottext">SymbolTable
</span><a href="#local-6989586621681090731"><span class="hs-identifier hs-var">symtab</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; NameCacheUpdater -&gt; IO SymbolTable
</span><a href="GHC.Iface.Binary.html#getSymbolTable"><span class="hs-identifier hs-var">getSymbolTable</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090737"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">NameCacheUpdater
</span><a href="#local-6989586621681090745"><span class="hs-identifier hs-var">ncu</span></a></span><span>
</span><span id="line-178"></span><span>        </span><span class="annot"><span class="annottext">BinHandle -&gt; Bin Any -&gt; IO ()
forall {k} (a :: k). BinHandle -&gt; Bin a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#seekBin"><span class="hs-identifier hs-var">seekBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090737"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090732"><span class="hs-identifier hs-var">data_p</span></a></span><span>             </span><span class="hs-comment">-- Back to where we were before</span><span>
</span><span id="line-179"></span><span>
</span><span id="line-180"></span><span>        </span><span class="hs-comment">-- It is only now that we know how to get a Name</span><span>
</span><span id="line-181"></span><span>        </span><span class="annot"><span class="annottext">BinHandle -&gt; IO BinHandle
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(BinHandle -&gt; IO BinHandle) -&gt; BinHandle -&gt; IO BinHandle
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; UserData -&gt; BinHandle
</span><a href="GHC.Utils.Binary.html#setUserData"><span class="hs-identifier hs-var">setUserData</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090737"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">(UserData -&gt; BinHandle) -&gt; UserData -&gt; BinHandle
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">(BinHandle -&gt; IO Name) -&gt; (BinHandle -&gt; IO FastString) -&gt; UserData
</span><a href="GHC.Utils.Binary.html#newReadState"><span class="hs-identifier hs-var">newReadState</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">NameCacheUpdater
-&gt; Dictionary -&gt; SymbolTable -&gt; BinHandle -&gt; IO Name
</span><a href="GHC.Iface.Binary.html#getSymtabName"><span class="hs-identifier hs-var">getSymtabName</span></a></span><span> </span><span class="annot"><span class="annottext">NameCacheUpdater
</span><a href="#local-6989586621681090745"><span class="hs-identifier hs-var">ncu</span></a></span><span> </span><span class="annot"><span class="annottext">Dictionary
</span><a href="#local-6989586621681090740"><span class="hs-identifier hs-var">dict</span></a></span><span> </span><span class="annot"><span class="annottext">SymbolTable
</span><a href="#local-6989586621681090731"><span class="hs-identifier hs-var">symtab</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-182"></span><span>                                               </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Dictionary -&gt; BinHandle -&gt; IO FastString
</span><a href="GHC.Iface.Binary.html#getDictFastString"><span class="hs-identifier hs-var">getDictFastString</span></a></span><span> </span><span class="annot"><span class="annottext">Dictionary
</span><a href="#local-6989586621681090740"><span class="hs-identifier hs-var">dict</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-183"></span><span>
</span><span id="line-184"></span><span>    </span><span class="hs-comment">-- Read the interface file</span><span>
</span><span id="line-185"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; IO a
forall a. Binary a =&gt; BinHandle -&gt; IO a
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var">get</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090738"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-186"></span><span>
</span><span id="line-187"></span><span class="hs-comment">-- | Write an interface file</span><span>
</span><span id="line-188"></span><span class="annot"><a href="GHC.Iface.Binary.html#writeBinIface"><span class="hs-identifier hs-type">writeBinIface</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.IO.html#FilePath"><span class="hs-identifier hs-type">FilePath</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Driver.Types.html#ModIface"><span class="hs-identifier hs-type">ModIface</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><span id="line-189"></span><span id="writeBinIface"><span class="annot"><span class="annottext">writeBinIface :: DynFlags -&gt; String -&gt; ModIface -&gt; IO ()
</span><a href="GHC.Iface.Binary.html#writeBinIface"><span class="hs-identifier hs-var hs-var">writeBinIface</span></a></span></span><span> </span><span id="local-6989586621681090730"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681090730"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681090729"><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090729"><span class="hs-identifier hs-var">hi_path</span></a></span></span><span> </span><span id="local-6989586621681090728"><span class="annot"><span class="annottext">ModIface
</span><a href="#local-6989586621681090728"><span class="hs-identifier hs-var">mod_iface</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-190"></span><span>    </span><span id="local-6989586621681090727"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090727"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Int -&gt; IO BinHandle
</span><a href="GHC.Utils.Binary.html#openBinMem"><span class="hs-identifier hs-var">openBinMem</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="GHC.Iface.Binary.html#initBinMemSize"><span class="hs-identifier hs-var">initBinMemSize</span></a></span><span>
</span><span id="line-191"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681090724"><span class="annot"><span class="annottext">platform :: Platform
</span><a href="#local-6989586621681090724"><span class="hs-identifier hs-var hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; Platform
</span><a href="GHC.Driver.Session.html#targetPlatform"><span class="hs-identifier hs-var hs-var">targetPlatform</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681090730"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-192"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; FixedLengthEncoding Word32 -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090727"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; FixedLengthEncoding Word32
</span><a href="GHC.Iface.Binary.html#binaryInterfaceMagic"><span class="hs-identifier hs-var">binaryInterfaceMagic</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681090724"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-193"></span><span>
</span><span id="line-194"></span><span>    </span><span class="hs-comment">-- The version and way descriptor go next</span><span>
</span><span id="line-195"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; String -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090727"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Integer -&gt; String
forall a. Show a =&gt; a -&gt; String
</span><a href="../../base/src/GHC.Show.html#show"><span class="hs-identifier hs-var">show</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><a href="GHC.Settings.Constants.html#hiVersion"><span class="hs-identifier hs-var">hiVersion</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-196"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681090722"><span class="annot"><span class="annottext">way_descr :: String
</span><a href="#local-6989586621681090722"><span class="hs-identifier hs-var hs-var">way_descr</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Set Way -&gt; String
</span><a href="GHC.Iface.Binary.html#getWayDescr"><span class="hs-identifier hs-var">getWayDescr</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681090724"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; Set Way
</span><a href="GHC.Driver.Session.html#ways"><span class="hs-identifier hs-var hs-var">ways</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681090730"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-197"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; String -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span>  </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090727"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090722"><span class="hs-identifier hs-var">way_descr</span></a></span><span>
</span><span id="line-198"></span><span>
</span><span id="line-199"></span><span>    </span><span id="local-6989586621681090721"><span class="annot"><span class="annottext">Bin (Bin Any)
</span><a href="#local-6989586621681090721"><span class="hs-identifier hs-var">extFields_p_p</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO (Bin (Bin Any))
forall {k} (a :: k). BinHandle -&gt; IO (Bin a)
</span><a href="GHC.Utils.Binary.html#tellBin"><span class="hs-identifier hs-var">tellBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090727"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-200"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Bin (Bin Any) -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090727"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Bin (Bin Any)
</span><a href="#local-6989586621681090721"><span class="hs-identifier hs-var">extFields_p_p</span></a></span><span>
</span><span id="line-201"></span><span>
</span><span id="line-202"></span><span>    </span><span class="annot"><span class="annottext">(SDoc -&gt; IO ()) -&gt; BinHandle -&gt; ModIface -&gt; IO ()
forall a. Binary a =&gt; (SDoc -&gt; IO ()) -&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Iface.Binary.html#putWithUserData"><span class="hs-identifier hs-var">putWithUserData</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; Int -&gt; SDoc -&gt; IO ()
</span><a href="GHC.Utils.Error.html#debugTraceMsg"><span class="hs-identifier hs-var">debugTraceMsg</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681090730"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">3</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090727"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">ModIface
</span><a href="#local-6989586621681090728"><span class="hs-identifier hs-var">mod_iface</span></a></span><span>
</span><span id="line-203"></span><span>
</span><span id="line-204"></span><span>    </span><span id="local-6989586621681090719"><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090719"><span class="hs-identifier hs-var">extFields_p</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO (Bin Any)
forall {k} (a :: k). BinHandle -&gt; IO (Bin a)
</span><a href="GHC.Utils.Binary.html#tellBin"><span class="hs-identifier hs-var">tellBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090727"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-205"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Bin (Bin Any) -&gt; Bin Any -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; Bin a -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#putAt"><span class="hs-identifier hs-var">putAt</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090727"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Bin (Bin Any)
</span><a href="#local-6989586621681090721"><span class="hs-identifier hs-var">extFields_p_p</span></a></span><span> </span><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090719"><span class="hs-identifier hs-var">extFields_p</span></a></span><span>
</span><span id="line-206"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Bin Any -&gt; IO ()
forall {k} (a :: k). BinHandle -&gt; Bin a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#seekBin"><span class="hs-identifier hs-var">seekBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090727"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090719"><span class="hs-identifier hs-var">extFields_p</span></a></span><span>
</span><span id="line-207"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; ExtensibleFields -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090727"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">ModIface -&gt; ExtensibleFields
forall (phase :: ModIfacePhase).
ModIface_ phase -&gt; ExtensibleFields
</span><a href="GHC.Driver.Types.html#mi_ext_fields"><span class="hs-identifier hs-var hs-var">mi_ext_fields</span></a></span><span> </span><span class="annot"><span class="annottext">ModIface
</span><a href="#local-6989586621681090728"><span class="hs-identifier hs-var">mod_iface</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-208"></span><span>
</span><span id="line-209"></span><span>    </span><span class="hs-comment">-- And send the result to the file</span><span>
</span><span id="line-210"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; String -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#writeBinMem"><span class="hs-identifier hs-var">writeBinMem</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090727"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090729"><span class="hs-identifier hs-var">hi_path</span></a></span><span>
</span><span id="line-211"></span><span>
</span><span id="line-212"></span><span class="hs-comment">-- | Put a piece of data with an initialised `UserData` field. This</span><span>
</span><span id="line-213"></span><span class="hs-comment">-- is necessary if you want to serialise Names or FastStrings.</span><span>
</span><span id="line-214"></span><span class="hs-comment">-- It also writes a symbol table and the dictionary.</span><span>
</span><span id="line-215"></span><span class="hs-comment">-- This segment should be read using `getWithUserData`.</span><span>
</span><span id="line-216"></span><span id="local-6989586621681091165"><span class="annot"><a href="GHC.Iface.Binary.html#putWithUserData"><span class="hs-identifier hs-type">putWithUserData</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#Binary"><span class="hs-identifier hs-type">Binary</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681091165"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Utils.Outputable.html#SDoc"><span class="hs-identifier hs-type">SDoc</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#BinHandle"><span class="hs-identifier hs-type">BinHandle</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621681091165"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span></span><span>
</span><span id="line-217"></span><span id="putWithUserData"><span class="annot"><span class="annottext">putWithUserData :: forall a. Binary a =&gt; (SDoc -&gt; IO ()) -&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Iface.Binary.html#putWithUserData"><span class="hs-identifier hs-var hs-var">putWithUserData</span></a></span></span><span> </span><span id="local-6989586621681090684"><span class="annot"><span class="annottext">SDoc -&gt; IO ()
</span><a href="#local-6989586621681090684"><span class="hs-identifier hs-var">log_action</span></a></span></span><span> </span><span id="local-6989586621681090683"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090683"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span id="local-6989586621681090682"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681090682"><span class="hs-identifier hs-var">payload</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-218"></span><span>    </span><span class="hs-comment">-- Remember where the dictionary pointer will go</span><span>
</span><span id="line-219"></span><span>    </span><span id="local-6989586621681090681"><span class="annot"><span class="annottext">Bin (Bin Any)
</span><a href="#local-6989586621681090681"><span class="hs-identifier hs-var">dict_p_p</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO (Bin (Bin Any))
forall {k} (a :: k). BinHandle -&gt; IO (Bin a)
</span><a href="GHC.Utils.Binary.html#tellBin"><span class="hs-identifier hs-var">tellBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090683"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-220"></span><span>    </span><span class="hs-comment">-- Placeholder for ptr to dictionary</span><span>
</span><span id="line-221"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Bin (Bin Any) -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090683"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Bin (Bin Any)
</span><a href="#local-6989586621681090681"><span class="hs-identifier hs-var">dict_p_p</span></a></span><span>
</span><span id="line-222"></span><span>
</span><span id="line-223"></span><span>    </span><span class="hs-comment">-- Remember where the symbol table pointer will go</span><span>
</span><span id="line-224"></span><span>    </span><span id="local-6989586621681090680"><span class="annot"><span class="annottext">Bin (Bin Any)
</span><a href="#local-6989586621681090680"><span class="hs-identifier hs-var">symtab_p_p</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO (Bin (Bin Any))
forall {k} (a :: k). BinHandle -&gt; IO (Bin a)
</span><a href="GHC.Utils.Binary.html#tellBin"><span class="hs-identifier hs-var">tellBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090683"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-225"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Bin (Bin Any) -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090683"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Bin (Bin Any)
</span><a href="#local-6989586621681090680"><span class="hs-identifier hs-var">symtab_p_p</span></a></span><span>
</span><span id="line-226"></span><span>    </span><span class="hs-comment">-- Make some initial state</span><span>
</span><span id="line-227"></span><span>    </span><span id="local-6989586621681090679"><span class="annot"><span class="annottext">FastMutInt
</span><a href="#local-6989586621681090679"><span class="hs-identifier hs-var">symtab_next</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">IO FastMutInt
</span><a href="GHC.Data.FastMutInt.html#newFastMutInt"><span class="hs-identifier hs-var">newFastMutInt</span></a></span><span>
</span><span id="line-228"></span><span>    </span><span class="annot"><span class="annottext">FastMutInt -&gt; Int -&gt; IO ()
</span><a href="GHC.Data.FastMutInt.html#writeFastMutInt"><span class="hs-identifier hs-var">writeFastMutInt</span></a></span><span> </span><span class="annot"><span class="annottext">FastMutInt
</span><a href="#local-6989586621681090679"><span class="hs-identifier hs-var">symtab_next</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span>
</span><span id="line-229"></span><span>    </span><span id="local-6989586621681090676"><span class="annot"><span class="annottext">IORef (UniqFM Name (Int, Name))
</span><a href="#local-6989586621681090676"><span class="hs-identifier hs-var">symtab_map</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">UniqFM Name (Int, Name) -&gt; IO (IORef (UniqFM Name (Int, Name)))
forall a. a -&gt; IO (IORef a)
</span><a href="../../base/src/GHC.IORef.html#newIORef"><span class="hs-identifier hs-var">newIORef</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM Name (Int, Name)
forall key elt. UniqFM key elt
</span><a href="GHC.Types.Unique.FM.html#emptyUFM"><span class="hs-identifier hs-var">emptyUFM</span></a></span><span>
</span><span id="line-230"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681090673"><span class="annot"><span class="annottext">bin_symtab :: BinSymbolTable
</span><a href="#local-6989586621681090673"><span class="hs-identifier hs-var hs-var">bin_symtab</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BinSymbolTable :: FastMutInt -&gt; IORef (UniqFM Name (Int, Name)) -&gt; BinSymbolTable
</span><a href="GHC.Iface.Binary.html#BinSymbolTable"><span class="hs-identifier hs-type">BinSymbolTable</span></a></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-231"></span><span>                         </span><span class="annot"><span class="annottext">bin_symtab_next :: FastMutInt
</span><a href="GHC.Iface.Binary.html#bin_symtab_next"><span class="hs-identifier hs-var">bin_symtab_next</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">FastMutInt
</span><a href="#local-6989586621681090679"><span class="hs-identifier hs-var">symtab_next</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-232"></span><span>                         </span><span class="annot"><span class="annottext">bin_symtab_map :: IORef (UniqFM Name (Int, Name))
</span><a href="GHC.Iface.Binary.html#bin_symtab_map"><span class="hs-identifier hs-var">bin_symtab_map</span></a></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">IORef (UniqFM Name (Int, Name))
</span><a href="#local-6989586621681090676"><span class="hs-identifier hs-var">symtab_map</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-233"></span><span>    </span><span id="local-6989586621681090669"><span class="annot"><span class="annottext">FastMutInt
</span><a href="#local-6989586621681090669"><span class="hs-identifier hs-var">dict_next_ref</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">IO FastMutInt
</span><a href="GHC.Data.FastMutInt.html#newFastMutInt"><span class="hs-identifier hs-var">newFastMutInt</span></a></span><span>
</span><span id="line-234"></span><span>    </span><span class="annot"><span class="annottext">FastMutInt -&gt; Int -&gt; IO ()
</span><a href="GHC.Data.FastMutInt.html#writeFastMutInt"><span class="hs-identifier hs-var">writeFastMutInt</span></a></span><span> </span><span class="annot"><span class="annottext">FastMutInt
</span><a href="#local-6989586621681090669"><span class="hs-identifier hs-var">dict_next_ref</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span>
</span><span id="line-235"></span><span>    </span><span id="local-6989586621681090668"><span class="annot"><span class="annottext">IORef (UniqFM FastString (Int, FastString))
</span><a href="#local-6989586621681090668"><span class="hs-identifier hs-var">dict_map_ref</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">UniqFM FastString (Int, FastString)
-&gt; IO (IORef (UniqFM FastString (Int, FastString)))
forall a. a -&gt; IO (IORef a)
</span><a href="../../base/src/GHC.IORef.html#newIORef"><span class="hs-identifier hs-var">newIORef</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM FastString (Int, FastString)
forall key elt. UniqFM key elt
</span><a href="GHC.Types.Unique.FM.html#emptyUFM"><span class="hs-identifier hs-var">emptyUFM</span></a></span><span>
</span><span id="line-236"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681090667"><span class="annot"><span class="annottext">bin_dict :: BinDictionary
</span><a href="#local-6989586621681090667"><span class="hs-identifier hs-var hs-var">bin_dict</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BinDictionary :: FastMutInt
-&gt; IORef (UniqFM FastString (Int, FastString)) -&gt; BinDictionary
</span><a href="GHC.Iface.Binary.html#BinDictionary"><span class="hs-identifier hs-type">BinDictionary</span></a></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-237"></span><span>                       </span><span class="annot"><span class="annottext">bin_dict_next :: FastMutInt
</span><a href="GHC.Iface.Binary.html#bin_dict_next"><span class="hs-identifier hs-var">bin_dict_next</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">FastMutInt
</span><a href="#local-6989586621681090669"><span class="hs-identifier hs-var">dict_next_ref</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-238"></span><span>                       </span><span class="annot"><span class="annottext">bin_dict_map :: IORef (UniqFM FastString (Int, FastString))
</span><a href="GHC.Iface.Binary.html#bin_dict_map"><span class="hs-identifier hs-var">bin_dict_map</span></a></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">IORef (UniqFM FastString (Int, FastString))
</span><a href="#local-6989586621681090668"><span class="hs-identifier hs-var">dict_map_ref</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-239"></span><span>
</span><span id="line-240"></span><span>    </span><span class="hs-comment">-- Put the main thing,</span><span>
</span><span id="line-241"></span><span>    </span><span id="local-6989586621681090663"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090663"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO BinHandle
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(BinHandle -&gt; IO BinHandle) -&gt; BinHandle -&gt; IO BinHandle
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; UserData -&gt; BinHandle
</span><a href="GHC.Utils.Binary.html#setUserData"><span class="hs-identifier hs-var">setUserData</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090683"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">(UserData -&gt; BinHandle) -&gt; UserData -&gt; BinHandle
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">(BinHandle -&gt; Name -&gt; IO ())
-&gt; (BinHandle -&gt; Name -&gt; IO ())
-&gt; (BinHandle -&gt; FastString -&gt; IO ())
-&gt; UserData
</span><a href="GHC.Utils.Binary.html#newWriteState"><span class="hs-identifier hs-var">newWriteState</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BinDictionary -&gt; BinSymbolTable -&gt; BinHandle -&gt; Name -&gt; IO ()
</span><a href="GHC.Iface.Binary.html#putName"><span class="hs-identifier hs-var">putName</span></a></span><span> </span><span class="annot"><span class="annottext">BinDictionary
</span><a href="#local-6989586621681090667"><span class="hs-identifier hs-var">bin_dict</span></a></span><span> </span><span class="annot"><span class="annottext">BinSymbolTable
</span><a href="#local-6989586621681090673"><span class="hs-identifier hs-var">bin_symtab</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-242"></span><span>                                                  </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BinDictionary -&gt; BinSymbolTable -&gt; BinHandle -&gt; Name -&gt; IO ()
</span><a href="GHC.Iface.Binary.html#putName"><span class="hs-identifier hs-var">putName</span></a></span><span> </span><span class="annot"><span class="annottext">BinDictionary
</span><a href="#local-6989586621681090667"><span class="hs-identifier hs-var">bin_dict</span></a></span><span> </span><span class="annot"><span class="annottext">BinSymbolTable
</span><a href="#local-6989586621681090673"><span class="hs-identifier hs-var">bin_symtab</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-243"></span><span>                                                  </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BinDictionary -&gt; BinHandle -&gt; FastString -&gt; IO ()
</span><a href="GHC.Iface.Binary.html#putFastString"><span class="hs-identifier hs-var">putFastString</span></a></span><span> </span><span class="annot"><span class="annottext">BinDictionary
</span><a href="#local-6989586621681090667"><span class="hs-identifier hs-var">bin_dict</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-244"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; a -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090663"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681090682"><span class="hs-identifier hs-var">payload</span></a></span><span>
</span><span id="line-245"></span><span>
</span><span id="line-246"></span><span>    </span><span class="hs-comment">-- Write the symtab pointer at the front of the file</span><span>
</span><span id="line-247"></span><span>    </span><span id="local-6989586621681090661"><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090661"><span class="hs-identifier hs-var">symtab_p</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO (Bin Any)
forall {k} (a :: k). BinHandle -&gt; IO (Bin a)
</span><a href="GHC.Utils.Binary.html#tellBin"><span class="hs-identifier hs-var">tellBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090663"><span class="hs-identifier hs-var">bh</span></a></span><span>        </span><span class="hs-comment">-- This is where the symtab will start</span><span>
</span><span id="line-248"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Bin (Bin Any) -&gt; Bin Any -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; Bin a -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#putAt"><span class="hs-identifier hs-var">putAt</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090663"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Bin (Bin Any)
</span><a href="#local-6989586621681090680"><span class="hs-identifier hs-var">symtab_p_p</span></a></span><span> </span><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090661"><span class="hs-identifier hs-var">symtab_p</span></a></span><span>  </span><span class="hs-comment">-- Fill in the placeholder</span><span>
</span><span id="line-249"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Bin Any -&gt; IO ()
forall {k} (a :: k). BinHandle -&gt; Bin a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#seekBin"><span class="hs-identifier hs-var">seekBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090663"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090661"><span class="hs-identifier hs-var">symtab_p</span></a></span><span>           </span><span class="hs-comment">-- Seek back to the end of the file</span><span>
</span><span id="line-250"></span><span>
</span><span id="line-251"></span><span>    </span><span class="hs-comment">-- Write the symbol table itself</span><span>
</span><span id="line-252"></span><span>    </span><span id="local-6989586621681090660"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090660"><span class="hs-identifier hs-var">symtab_next</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">FastMutInt -&gt; IO Int
</span><a href="GHC.Data.FastMutInt.html#readFastMutInt"><span class="hs-identifier hs-var">readFastMutInt</span></a></span><span> </span><span class="annot"><span class="annottext">FastMutInt
</span><a href="#local-6989586621681090679"><span class="hs-identifier hs-var">symtab_next</span></a></span><span>
</span><span id="line-253"></span><span>    </span><span id="local-6989586621681090658"><span class="annot"><span class="annottext">UniqFM Name (Int, Name)
</span><a href="#local-6989586621681090658"><span class="hs-identifier hs-var">symtab_map</span></a></span></span><span>  </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">IORef (UniqFM Name (Int, Name)) -&gt; IO (UniqFM Name (Int, Name))
forall a. IORef a -&gt; IO a
</span><a href="../../base/src/GHC.IORef.html#readIORef"><span class="hs-identifier hs-var">readIORef</span></a></span><span> </span><span class="annot"><span class="annottext">IORef (UniqFM Name (Int, Name))
</span><a href="#local-6989586621681090676"><span class="hs-identifier hs-var">symtab_map</span></a></span><span>
</span><span id="line-254"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Int -&gt; UniqFM Name (Int, Name) -&gt; IO ()
</span><a href="GHC.Iface.Binary.html#putSymbolTable"><span class="hs-identifier hs-var">putSymbolTable</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090663"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090660"><span class="hs-identifier hs-var">symtab_next</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM Name (Int, Name)
</span><a href="#local-6989586621681090658"><span class="hs-identifier hs-var">symtab_map</span></a></span><span>
</span><span id="line-255"></span><span>    </span><span class="annot"><span class="annottext">SDoc -&gt; IO ()
</span><a href="#local-6989586621681090684"><span class="hs-identifier hs-var">log_action</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;writeBinIface:&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#int"><span class="hs-identifier hs-var">int</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090660"><span class="hs-identifier hs-var">symtab_next</span></a></span><span>
</span><span id="line-256"></span><span>                                </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;Names&quot;</span></span><span class="hs-special">)</span><span>
</span><span id="line-257"></span><span>
</span><span id="line-258"></span><span>    </span><span class="hs-comment">-- NB. write the dictionary after the symbol table, because</span><span>
</span><span id="line-259"></span><span>    </span><span class="hs-comment">-- writing the symbol table may create more dictionary entries.</span><span>
</span><span id="line-260"></span><span>
</span><span id="line-261"></span><span>    </span><span class="hs-comment">-- Write the dictionary pointer at the front of the file</span><span>
</span><span id="line-262"></span><span>    </span><span id="local-6989586621681090654"><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090654"><span class="hs-identifier hs-var">dict_p</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO (Bin Any)
forall {k} (a :: k). BinHandle -&gt; IO (Bin a)
</span><a href="GHC.Utils.Binary.html#tellBin"><span class="hs-identifier hs-var">tellBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090663"><span class="hs-identifier hs-var">bh</span></a></span><span>          </span><span class="hs-comment">-- This is where the dictionary will start</span><span>
</span><span id="line-263"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Bin (Bin Any) -&gt; Bin Any -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; Bin a -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#putAt"><span class="hs-identifier hs-var">putAt</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090663"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Bin (Bin Any)
</span><a href="#local-6989586621681090681"><span class="hs-identifier hs-var">dict_p_p</span></a></span><span> </span><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090654"><span class="hs-identifier hs-var">dict_p</span></a></span><span>      </span><span class="hs-comment">-- Fill in the placeholder</span><span>
</span><span id="line-264"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Bin Any -&gt; IO ()
forall {k} (a :: k). BinHandle -&gt; Bin a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#seekBin"><span class="hs-identifier hs-var">seekBin</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090663"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Bin Any
</span><a href="#local-6989586621681090654"><span class="hs-identifier hs-var">dict_p</span></a></span><span>             </span><span class="hs-comment">-- Seek back to the end of the file</span><span>
</span><span id="line-265"></span><span>
</span><span id="line-266"></span><span>    </span><span class="hs-comment">-- Write the dictionary itself</span><span>
</span><span id="line-267"></span><span>    </span><span id="local-6989586621681090653"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090653"><span class="hs-identifier hs-var">dict_next</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">FastMutInt -&gt; IO Int
</span><a href="GHC.Data.FastMutInt.html#readFastMutInt"><span class="hs-identifier hs-var">readFastMutInt</span></a></span><span> </span><span class="annot"><span class="annottext">FastMutInt
</span><a href="#local-6989586621681090669"><span class="hs-identifier hs-var">dict_next_ref</span></a></span><span>
</span><span id="line-268"></span><span>    </span><span id="local-6989586621681090652"><span class="annot"><span class="annottext">UniqFM FastString (Int, FastString)
</span><a href="#local-6989586621681090652"><span class="hs-identifier hs-var">dict_map</span></a></span></span><span>  </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">IORef (UniqFM FastString (Int, FastString))
-&gt; IO (UniqFM FastString (Int, FastString))
forall a. IORef a -&gt; IO a
</span><a href="../../base/src/GHC.IORef.html#readIORef"><span class="hs-identifier hs-var">readIORef</span></a></span><span> </span><span class="annot"><span class="annottext">IORef (UniqFM FastString (Int, FastString))
</span><a href="#local-6989586621681090668"><span class="hs-identifier hs-var">dict_map_ref</span></a></span><span>
</span><span id="line-269"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Int -&gt; UniqFM FastString (Int, FastString) -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#putDictionary"><span class="hs-identifier hs-var">putDictionary</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090663"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090653"><span class="hs-identifier hs-var">dict_next</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM FastString (Int, FastString)
</span><a href="#local-6989586621681090652"><span class="hs-identifier hs-var">dict_map</span></a></span><span>
</span><span id="line-270"></span><span>    </span><span class="annot"><span class="annottext">SDoc -&gt; IO ()
</span><a href="#local-6989586621681090684"><span class="hs-identifier hs-var">log_action</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;writeBinIface:&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#int"><span class="hs-identifier hs-var">int</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090653"><span class="hs-identifier hs-var">dict_next</span></a></span><span>
</span><span id="line-271"></span><span>                                </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;dict entries&quot;</span></span><span class="hs-special">)</span><span>
</span><span id="line-272"></span><span>
</span><span id="line-273"></span><span>
</span><span id="line-274"></span><span>
</span><span id="line-275"></span><span class="hs-comment">-- | Initial ram buffer to allocate for writing interface files</span><span>
</span><span id="line-276"></span><span class="annot"><a href="GHC.Iface.Binary.html#initBinMemSize"><span class="hs-identifier hs-type">initBinMemSize</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span>
</span><span id="line-277"></span><span id="initBinMemSize"><span class="annot"><span class="annottext">initBinMemSize :: Int
</span><a href="GHC.Iface.Binary.html#initBinMemSize"><span class="hs-identifier hs-var hs-var">initBinMemSize</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1024</span></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2A"><span class="hs-operator hs-var">*</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1024</span></span><span>
</span><span id="line-278"></span><span>
</span><span id="line-279"></span><span class="annot"><a href="GHC.Iface.Binary.html#binaryInterfaceMagic"><span class="hs-identifier hs-type">binaryInterfaceMagic</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#FixedLengthEncoding"><span class="hs-identifier hs-type">FixedLengthEncoding</span></a></span><span> </span><span class="annot"><a href="../../base/src/GHC.Word.html#Word32"><span class="hs-identifier hs-type">Word32</span></a></span><span>
</span><span id="line-280"></span><span id="binaryInterfaceMagic"><span class="annot"><span class="annottext">binaryInterfaceMagic :: Platform -&gt; FixedLengthEncoding Word32
</span><a href="GHC.Iface.Binary.html#binaryInterfaceMagic"><span class="hs-identifier hs-var hs-var">binaryInterfaceMagic</span></a></span></span><span> </span><span id="local-6989586621681090650"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681090650"><span class="hs-identifier hs-var">platform</span></a></span></span><span>
</span><span id="line-281"></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Bool
</span><a href="../../ghc-boot/src/GHC.Platform.html#target32Bit"><span class="hs-identifier hs-var">target32Bit</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681090650"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word32 -&gt; FixedLengthEncoding Word32
forall a. a -&gt; FixedLengthEncoding a
</span><a href="GHC.Utils.Binary.html#FixedLengthEncoding"><span class="hs-identifier hs-var">FixedLengthEncoding</span></a></span><span> </span><span class="annot"><span class="annottext">Word32
</span><span class="hs-number">0x1face</span></span><span>
</span><span id="line-282"></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>            </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word32 -&gt; FixedLengthEncoding Word32
forall a. a -&gt; FixedLengthEncoding a
</span><a href="GHC.Utils.Binary.html#FixedLengthEncoding"><span class="hs-identifier hs-var">FixedLengthEncoding</span></a></span><span> </span><span class="annot"><span class="annottext">Word32
</span><span class="hs-number">0x1face64</span></span><span>
</span><span id="line-283"></span><span>
</span><span id="line-284"></span><span>
</span><span id="line-285"></span><span class="hs-comment">-- -----------------------------------------------------------------------------</span><span>
</span><span id="line-286"></span><span class="hs-comment">-- The symbol table</span><span>
</span><span id="line-287"></span><span class="hs-comment">--</span><span>
</span><span id="line-288"></span><span>
</span><span id="line-289"></span><span class="annot"><a href="GHC.Iface.Binary.html#putSymbolTable"><span class="hs-identifier hs-type">putSymbolTable</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#BinHandle"><span class="hs-identifier hs-type">BinHandle</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Unique.FM.html#UniqFM"><span class="hs-identifier hs-type">UniqFM</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">,</span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><span id="line-290"></span><span id="putSymbolTable"><span class="annot"><span class="annottext">putSymbolTable :: BinHandle -&gt; Int -&gt; UniqFM Name (Int, Name) -&gt; IO ()
</span><a href="GHC.Iface.Binary.html#putSymbolTable"><span class="hs-identifier hs-var hs-var">putSymbolTable</span></a></span></span><span> </span><span id="local-6989586621681090647"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090647"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span id="local-6989586621681090646"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090646"><span class="hs-identifier hs-var">next_off</span></a></span></span><span> </span><span id="local-6989586621681090645"><span class="annot"><span class="annottext">UniqFM Name (Int, Name)
</span><a href="#local-6989586621681090645"><span class="hs-identifier hs-var">symtab</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-291"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Int -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090647"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090646"><span class="hs-identifier hs-var">next_off</span></a></span><span>
</span><span id="line-292"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681090640"><span class="annot"><span class="annottext">names :: [Name]
</span><a href="#local-6989586621681090640"><span class="hs-identifier hs-var hs-var">names</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SymbolTable -&gt; [Name]
forall i e. Array i e -&gt; [e]
</span><a href="../../base/src/GHC.Arr.html#elems"><span class="hs-identifier hs-var">elems</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(Int, Int) -&gt; [(Int, Name)] -&gt; SymbolTable
forall i e. Ix i =&gt; (i, i) -&gt; [(i, e)] -&gt; Array i e
</span><a href="../../base/src/GHC.Arr.html#array"><span class="hs-identifier hs-var">array</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090646"><span class="hs-identifier hs-var">next_off</span></a></span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#-"><span class="hs-glyph hs-var">-</span></a></span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">UniqFM Name (Int, Name) -&gt; [(Int, Name)]
forall key elt. UniqFM key elt -&gt; [elt]
</span><a href="GHC.Types.Unique.FM.html#nonDetEltsUFM"><span class="hs-identifier hs-var">nonDetEltsUFM</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM Name (Int, Name)
</span><a href="#local-6989586621681090645"><span class="hs-identifier hs-var">symtab</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-293"></span><span>      </span><span class="hs-comment">-- It's OK to use nonDetEltsUFM here because the elements have</span><span>
</span><span id="line-294"></span><span>      </span><span class="hs-comment">-- indices that array uses to create order</span><span>
</span><span id="line-295"></span><span>    </span><span class="annot"><span class="annottext">(Name -&gt; IO ()) -&gt; [Name] -&gt; IO ()
forall (t :: * -&gt; *) (m :: * -&gt; *) a b.
(Foldable t, Monad m) =&gt;
(a -&gt; m b) -&gt; t a -&gt; m ()
</span><a href="../../base/src/Data.Foldable.html#mapM_"><span class="hs-identifier hs-var">mapM_</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621681090635"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090635"><span class="hs-identifier hs-var">n</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; Name -&gt; UniqFM Name (Int, Name) -&gt; IO ()
forall key. BinHandle -&gt; Name -&gt; UniqFM key (Int, Name) -&gt; IO ()
</span><a href="GHC.Iface.Binary.html#serialiseName"><span class="hs-identifier hs-var">serialiseName</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090647"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090635"><span class="hs-identifier hs-var">n</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM Name (Int, Name)
</span><a href="#local-6989586621681090645"><span class="hs-identifier hs-var">symtab</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[Name]
</span><a href="#local-6989586621681090640"><span class="hs-identifier hs-var">names</span></a></span><span>
</span><span id="line-296"></span><span>
</span><span id="line-297"></span><span class="annot"><a href="GHC.Iface.Binary.html#getSymbolTable"><span class="hs-identifier hs-type">getSymbolTable</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#BinHandle"><span class="hs-identifier hs-type">BinHandle</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Iface.Env.html#NameCacheUpdater"><span class="hs-identifier hs-type">NameCacheUpdater</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#SymbolTable"><span class="hs-identifier hs-type">SymbolTable</span></a></span><span>
</span><span id="line-298"></span><span id="getSymbolTable"><span class="annot"><span class="annottext">getSymbolTable :: BinHandle -&gt; NameCacheUpdater -&gt; IO SymbolTable
</span><a href="GHC.Iface.Binary.html#getSymbolTable"><span class="hs-identifier hs-var hs-var">getSymbolTable</span></a></span></span><span> </span><span id="local-6989586621681090633"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090633"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span id="local-6989586621681090632"><span class="annot"><span class="annottext">NameCacheUpdater
</span><a href="#local-6989586621681090632"><span class="hs-identifier hs-var">ncu</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-299"></span><span>    </span><span id="local-6989586621681090631"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090631"><span class="hs-identifier hs-var">sz</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO Int
forall a. Binary a =&gt; BinHandle -&gt; IO a
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var">get</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090633"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-300"></span><span>    </span><span id="local-6989586621681090630"><span class="annot"><span class="annottext">[OnDiskName]
</span><a href="#local-6989586621681090630"><span class="hs-identifier hs-var">od_names</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">[IO OnDiskName] -&gt; IO [OnDiskName]
forall (t :: * -&gt; *) (m :: * -&gt; *) a.
(Traversable t, Monad m) =&gt;
t (m a) -&gt; m (t a)
</span><a href="../../base/src/Data.Traversable.html#sequence"><span class="hs-identifier hs-var">sequence</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; IO OnDiskName -&gt; [IO OnDiskName]
forall a. Int -&gt; a -&gt; [a]
</span><a href="../../base/src/GHC.List.html#replicate"><span class="hs-identifier hs-var">replicate</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090631"><span class="hs-identifier hs-var">sz</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BinHandle -&gt; IO OnDiskName
forall a. Binary a =&gt; BinHandle -&gt; IO a
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var">get</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090633"><span class="hs-identifier hs-var">bh</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-301"></span><span>    </span><span class="annot"><span class="annottext">NameCacheUpdater -&gt; forall c. (NameCache -&gt; (NameCache, c)) -&gt; IO c
</span><a href="GHC.Iface.Env.html#updateNameCache"><span class="hs-identifier hs-var hs-var">updateNameCache</span></a></span><span> </span><span class="annot"><span class="annottext">NameCacheUpdater
</span><a href="#local-6989586621681090632"><span class="hs-identifier hs-var">ncu</span></a></span><span> </span><span class="annot"><span class="annottext">((NameCache -&gt; (NameCache, SymbolTable)) -&gt; IO SymbolTable)
-&gt; (NameCache -&gt; (NameCache, SymbolTable)) -&gt; IO SymbolTable
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-glyph">\</span><span id="local-6989586621681090626"><span class="annot"><span class="annottext">NameCache
</span><a href="#local-6989586621681090626"><span class="hs-identifier hs-var">namecache</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-302"></span><span>        </span><span class="annot"><span class="annottext">(forall s. ST s (NameCache, SymbolTable))
-&gt; (NameCache, SymbolTable)
forall a. (forall s. ST s a) -&gt; a
</span><a href="../../base/src/GHC.ST.html#runST"><span class="hs-identifier hs-var">runST</span></a></span><span> </span><span class="annot"><span class="annottext">((forall s. ST s (NameCache, SymbolTable))
 -&gt; (NameCache, SymbolTable))
-&gt; (forall s. ST s (NameCache, SymbolTable))
-&gt; (NameCache, SymbolTable)
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">(StateT NameCache (ST s) (NameCache, SymbolTable)
 -&gt; NameCache -&gt; ST s (NameCache, SymbolTable))
-&gt; NameCache
-&gt; StateT NameCache (ST s) (NameCache, SymbolTable)
-&gt; ST s (NameCache, SymbolTable)
forall a b c. (a -&gt; b -&gt; c) -&gt; b -&gt; a -&gt; c
</span><a href="../../base/src/GHC.Base.html#flip"><span class="hs-identifier hs-var">flip</span></a></span><span> </span><span class="annot"><span class="annottext">StateT NameCache (ST s) (NameCache, SymbolTable)
-&gt; NameCache -&gt; ST s (NameCache, SymbolTable)
forall (m :: * -&gt; *) s a. Monad m =&gt; StateT s m a -&gt; s -&gt; m a
</span><a href="../../transformers/src/Control.Monad.Trans.State.Strict.html#evalStateT"><span class="hs-identifier hs-var">State.evalStateT</span></a></span><span> </span><span class="annot"><span class="annottext">NameCache
</span><a href="#local-6989586621681090626"><span class="hs-identifier hs-var">namecache</span></a></span><span> </span><span class="annot"><span class="annottext">(StateT NameCache (ST s) (NameCache, SymbolTable)
 -&gt; ST s (NameCache, SymbolTable))
-&gt; StateT NameCache (ST s) (NameCache, SymbolTable)
-&gt; ST s (NameCache, SymbolTable)
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-303"></span><span>            </span><span id="local-6989586621681090585"><span class="annot"><span class="annottext">STArray s Int Name
</span><a href="#local-6989586621681090585"><span class="hs-identifier hs-var">mut_arr</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">ST s (STArray s Int Name)
-&gt; StateT NameCache (ST s) (STArray s Int Name)
forall (t :: (* -&gt; *) -&gt; * -&gt; *) (m :: * -&gt; *) a.
(MonadTrans t, Monad m) =&gt;
m a -&gt; t m a
</span><a href="../../transformers/src/Control.Monad.Trans.Class.html#lift"><span class="hs-identifier hs-var">lift</span></a></span><span> </span><span class="annot"><span class="annottext">(ST s (STArray s Int Name)
 -&gt; StateT NameCache (ST s) (STArray s Int Name))
-&gt; ST s (STArray s Int Name)
-&gt; StateT NameCache (ST s) (STArray s Int Name)
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">(Int, Int) -&gt; ST s (STArray s Int Name)
forall s. (Int, Int) -&gt; ST s (STArray s Int Name)
</span><a href="#local-6989586621681090583"><span class="hs-identifier hs-var">newSTArray_</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090631"><span class="hs-identifier hs-var">sz</span></a></span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#-"><span class="hs-glyph hs-var">-</span></a></span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">)</span><span>
</span><span id="line-304"></span><span>            </span><span class="annot"><span class="annottext">[(Int, OnDiskName)]
-&gt; ((Int, OnDiskName) -&gt; StateT NameCache (ST s) ())
-&gt; StateT NameCache (ST s) ()
forall (t :: * -&gt; *) (f :: * -&gt; *) a b.
(Foldable t, Applicative f) =&gt;
t a -&gt; (a -&gt; f b) -&gt; f ()
</span><a href="../../base/src/Data.Foldable.html#for_"><span class="hs-identifier hs-var">for_</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[Int] -&gt; [OnDiskName] -&gt; [(Int, OnDiskName)]
forall a b. [a] -&gt; [b] -&gt; [(a, b)]
</span><a href="../../base/src/GHC.List.html#zip"><span class="hs-identifier hs-var">zip</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-glyph">..</span><span class="hs-special">]</span><span> </span><span class="annot"><span class="annottext">[OnDiskName]
</span><a href="#local-6989586621681090630"><span class="hs-identifier hs-var">od_names</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">(((Int, OnDiskName) -&gt; StateT NameCache (ST s) ())
 -&gt; StateT NameCache (ST s) ())
-&gt; ((Int, OnDiskName) -&gt; StateT NameCache (ST s) ())
-&gt; StateT NameCache (ST s) ()
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-glyph">\</span><span class="hs-special">(</span><span id="local-6989586621681090581"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090581"><span class="hs-identifier hs-var">i</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681090580"><span class="annot"><span class="annottext">OnDiskName
</span><a href="#local-6989586621681090580"><span class="hs-identifier hs-var">odn</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-305"></span><span>                </span><span class="hs-special">(</span><span id="local-6989586621681090579"><span class="annot"><span class="annottext">NameCache
</span><a href="#local-6989586621681090579"><span class="hs-identifier hs-var">nc</span></a></span></span><span class="hs-special">,</span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621681090578"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090578"><span class="hs-identifier hs-var">n</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">(NameCache -&gt; (NameCache, Name))
-&gt; StateT NameCache (ST s) (NameCache, Name)
forall (m :: * -&gt; *) s a. Monad m =&gt; (s -&gt; a) -&gt; StateT s m a
</span><a href="../../transformers/src/Control.Monad.Trans.State.Strict.html#gets"><span class="hs-identifier hs-var">State.gets</span></a></span><span> </span><span class="annot"><span class="annottext">((NameCache -&gt; (NameCache, Name))
 -&gt; StateT NameCache (ST s) (NameCache, Name))
-&gt; (NameCache -&gt; (NameCache, Name))
-&gt; StateT NameCache (ST s) (NameCache, Name)
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-glyph">\</span><span id="local-6989586621681090576"><span class="annot"><span class="annottext">NameCache
</span><a href="#local-6989586621681090576"><span class="hs-identifier hs-var">nc</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">NameCache -&gt; OnDiskName -&gt; (NameCache, Name)
</span><a href="GHC.Iface.Binary.html#fromOnDiskName"><span class="hs-identifier hs-var">fromOnDiskName</span></a></span><span> </span><span class="annot"><span class="annottext">NameCache
</span><a href="#local-6989586621681090576"><span class="hs-identifier hs-var">nc</span></a></span><span> </span><span class="annot"><span class="annottext">OnDiskName
</span><a href="#local-6989586621681090580"><span class="hs-identifier hs-var">odn</span></a></span><span>
</span><span id="line-306"></span><span>                </span><span class="annot"><span class="annottext">ST s () -&gt; StateT NameCache (ST s) ()
forall (t :: (* -&gt; *) -&gt; * -&gt; *) (m :: * -&gt; *) a.
(MonadTrans t, Monad m) =&gt;
m a -&gt; t m a
</span><a href="../../transformers/src/Control.Monad.Trans.Class.html#lift"><span class="hs-identifier hs-var">lift</span></a></span><span> </span><span class="annot"><span class="annottext">(ST s () -&gt; StateT NameCache (ST s) ())
-&gt; ST s () -&gt; StateT NameCache (ST s) ()
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">STArray s Int Name -&gt; Int -&gt; Name -&gt; ST s ()
forall (a :: * -&gt; * -&gt; *) e (m :: * -&gt; *) i.
(MArray a e m, Ix i) =&gt;
a i e -&gt; i -&gt; e -&gt; m ()
</span><a href="../../array/src/Data.Array.Base.html#writeArray"><span class="hs-identifier hs-var">writeArray</span></a></span><span> </span><span class="annot"><span class="annottext">STArray s Int Name
</span><a href="#local-6989586621681090585"><span class="hs-identifier hs-var">mut_arr</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090581"><span class="hs-identifier hs-var">i</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090578"><span class="hs-identifier hs-var">n</span></a></span><span>
</span><span id="line-307"></span><span>                </span><span class="annot"><span class="annottext">NameCache -&gt; StateT NameCache (ST s) ()
forall (m :: * -&gt; *) s. Monad m =&gt; s -&gt; StateT s m ()
</span><a href="../../transformers/src/Control.Monad.Trans.State.Strict.html#put"><span class="hs-identifier hs-var">State.put</span></a></span><span> </span><span class="annot"><span class="annottext">NameCache
</span><a href="#local-6989586621681090579"><span class="hs-identifier hs-var">nc</span></a></span><span>
</span><span id="line-308"></span><span>            </span><span id="local-6989586621681090572"><span class="annot"><span class="annottext">SymbolTable
</span><a href="#local-6989586621681090572"><span class="hs-identifier hs-var">arr</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">ST s SymbolTable -&gt; StateT NameCache (ST s) SymbolTable
forall (t :: (* -&gt; *) -&gt; * -&gt; *) (m :: * -&gt; *) a.
(MonadTrans t, Monad m) =&gt;
m a -&gt; t m a
</span><a href="../../transformers/src/Control.Monad.Trans.Class.html#lift"><span class="hs-identifier hs-var">lift</span></a></span><span> </span><span class="annot"><span class="annottext">(ST s SymbolTable -&gt; StateT NameCache (ST s) SymbolTable)
-&gt; ST s SymbolTable -&gt; StateT NameCache (ST s) SymbolTable
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">STArray s Int Name -&gt; ST s SymbolTable
forall i (a :: * -&gt; * -&gt; *) e (m :: * -&gt; *) (b :: * -&gt; * -&gt; *).
(Ix i, MArray a e m, IArray b e) =&gt;
a i e -&gt; m (b i e)
</span><a href="../../array/src/Data.Array.Base.html#unsafeFreeze"><span class="hs-identifier hs-var">unsafeFreeze</span></a></span><span> </span><span class="annot"><span class="annottext">STArray s Int Name
</span><a href="#local-6989586621681090585"><span class="hs-identifier hs-var">mut_arr</span></a></span><span>
</span><span id="line-309"></span><span>            </span><span id="local-6989586621681090570"><span class="annot"><span class="annottext">NameCache
</span><a href="#local-6989586621681090570"><span class="hs-identifier hs-var">namecache'</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">StateT NameCache (ST s) NameCache
forall (m :: * -&gt; *) s. Monad m =&gt; StateT s m s
</span><a href="../../transformers/src/Control.Monad.Trans.State.Strict.html#get"><span class="hs-identifier hs-var">State.get</span></a></span><span>
</span><span id="line-310"></span><span>            </span><span class="annot"><span class="annottext">(NameCache, SymbolTable)
-&gt; StateT NameCache (ST s) (NameCache, SymbolTable)
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">NameCache
</span><a href="#local-6989586621681090570"><span class="hs-identifier hs-var">namecache'</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">SymbolTable
</span><a href="#local-6989586621681090572"><span class="hs-identifier hs-var">arr</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-311"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-312"></span><span>    </span><span class="hs-comment">-- This binding is required because the type of newArray_ cannot be inferred</span><span>
</span><span id="line-313"></span><span>    </span><span class="annot"><a href="#local-6989586621681090583"><span class="hs-identifier hs-type">newSTArray_</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><span id="local-6989586621681091102"><span class="annot"><a href="#local-6989586621681091102"><span class="hs-identifier hs-type">s</span></a></span></span><span class="hs-operator">.</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.ST.html#ST"><span class="hs-identifier hs-type">ST</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681091102"><span class="hs-identifier hs-type">s</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../../base/src/GHC.Arr.html#STArray"><span class="hs-identifier hs-type">STArray</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681091102"><span class="hs-identifier hs-type">s</span></a></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-314"></span><span>    </span><span id="local-6989586621681090583"><span class="annot"><span class="annottext">newSTArray_ :: forall s. (Int, Int) -&gt; ST s (STArray s Int Name)
</span><a href="#local-6989586621681090583"><span class="hs-identifier hs-var hs-var">newSTArray_</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Int, Int) -&gt; ST s (STArray s Int Name)
forall (a :: * -&gt; * -&gt; *) e (m :: * -&gt; *) i.
(MArray a e m, Ix i) =&gt;
(i, i) -&gt; m (a i e)
</span><a href="../../array/src/Data.Array.Base.html#newArray_"><span class="hs-identifier hs-var">newArray_</span></a></span><span>
</span><span id="line-315"></span><span>
</span><span id="line-316"></span><span class="hs-keyword">type</span><span> </span><span id="OnDiskName"><span class="annot"><a href="GHC.Iface.Binary.html#OnDiskName"><span class="hs-identifier hs-var">OnDiskName</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Unit.Types.html#Unit"><span class="hs-identifier hs-type">Unit</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Unit.Module.Name.html#ModuleName"><span class="hs-identifier hs-type">ModuleName</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Name.Occurrence.html#OccName"><span class="hs-identifier hs-type">OccName</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-317"></span><span>
</span><span id="line-318"></span><span class="annot"><a href="GHC.Iface.Binary.html#fromOnDiskName"><span class="hs-identifier hs-type">fromOnDiskName</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Name.Cache.html#NameCache"><span class="hs-identifier hs-type">NameCache</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Iface.Binary.html#OnDiskName"><span class="hs-identifier hs-type">OnDiskName</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Name.Cache.html#NameCache"><span class="hs-identifier hs-type">NameCache</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-319"></span><span id="fromOnDiskName"><span class="annot"><span class="annottext">fromOnDiskName :: NameCache -&gt; OnDiskName -&gt; (NameCache, Name)
</span><a href="GHC.Iface.Binary.html#fromOnDiskName"><span class="hs-identifier hs-var hs-var">fromOnDiskName</span></a></span></span><span> </span><span id="local-6989586621681090564"><span class="annot"><span class="annottext">NameCache
</span><a href="#local-6989586621681090564"><span class="hs-identifier hs-var">nc</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681090563"><span class="annot"><span class="annottext">GenUnit UnitId
</span><a href="#local-6989586621681090563"><span class="hs-identifier hs-var">pid</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681090562"><span class="annot"><span class="annottext">ModuleName
</span><a href="#local-6989586621681090562"><span class="hs-identifier hs-var">mod_name</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681090561"><span class="annot"><span class="annottext">OccName
</span><a href="#local-6989586621681090561"><span class="hs-identifier hs-var">occ</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-320"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681090560"><span class="annot"><span class="annottext">mod :: GenModule (GenUnit UnitId)
</span><a href="#local-6989586621681090560"><span class="hs-identifier hs-var hs-var">mod</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">GenUnit UnitId -&gt; ModuleName -&gt; GenModule (GenUnit UnitId)
forall u. u -&gt; ModuleName -&gt; GenModule u
</span><a href="GHC.Unit.Types.html#mkModule"><span class="hs-identifier hs-var">mkModule</span></a></span><span> </span><span class="annot"><span class="annottext">GenUnit UnitId
</span><a href="#local-6989586621681090563"><span class="hs-identifier hs-var">pid</span></a></span><span> </span><span class="annot"><span class="annottext">ModuleName
</span><a href="#local-6989586621681090562"><span class="hs-identifier hs-var">mod_name</span></a></span><span>
</span><span id="line-321"></span><span>        </span><span id="local-6989586621681090558"><span class="annot"><span class="annottext">cache :: OrigNameCache
</span><a href="#local-6989586621681090558"><span class="hs-identifier hs-var hs-var">cache</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">NameCache -&gt; OrigNameCache
</span><a href="GHC.Types.Name.Cache.html#nsNames"><span class="hs-identifier hs-var hs-var">nsNames</span></a></span><span> </span><span class="annot"><span class="annottext">NameCache
</span><a href="#local-6989586621681090564"><span class="hs-identifier hs-var">nc</span></a></span><span>
</span><span id="line-322"></span><span>    </span><span class="hs-keyword">in</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">OrigNameCache
-&gt; GenModule (GenUnit UnitId) -&gt; OccName -&gt; Maybe Name
</span><a href="GHC.Types.Name.Cache.html#lookupOrigNameCache"><span class="hs-identifier hs-var">lookupOrigNameCache</span></a></span><span> </span><span class="annot"><span class="annottext">OrigNameCache
</span><a href="#local-6989586621681090558"><span class="hs-identifier hs-var">cache</span></a></span><span>  </span><span class="annot"><span class="annottext">GenModule (GenUnit UnitId)
</span><a href="#local-6989586621681090560"><span class="hs-identifier hs-var">mod</span></a></span><span> </span><span class="annot"><span class="annottext">OccName
</span><a href="#local-6989586621681090561"><span class="hs-identifier hs-var">occ</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-323"></span><span>           </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span id="local-6989586621681090555"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090555"><span class="hs-identifier hs-var">name</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">NameCache
</span><a href="#local-6989586621681090564"><span class="hs-identifier hs-var">nc</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090555"><span class="hs-identifier hs-var">name</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-324"></span><span>           </span><span class="annot"><span class="annottext">Maybe Name
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-325"></span><span>               </span><span class="hs-keyword">let</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681090554"><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681090554"><span class="hs-identifier hs-var">uniq</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681090553"><span class="annot"><span class="annottext">UniqSupply
</span><a href="#local-6989586621681090553"><span class="hs-identifier hs-var">us</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">UniqSupply -&gt; (Unique, UniqSupply)
</span><a href="GHC.Types.Unique.Supply.html#takeUniqFromSupply"><span class="hs-identifier hs-var">takeUniqFromSupply</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">NameCache -&gt; UniqSupply
</span><a href="GHC.Types.Name.Cache.html#nsUniqs"><span class="hs-identifier hs-var hs-var">nsUniqs</span></a></span><span> </span><span class="annot"><span class="annottext">NameCache
</span><a href="#local-6989586621681090564"><span class="hs-identifier hs-var">nc</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-326"></span><span>                   </span><span id="local-6989586621681090550"><span class="annot"><span class="annottext">name :: Name
</span><a href="#local-6989586621681090550"><span class="hs-identifier hs-var hs-var">name</span></a></span></span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Unique -&gt; GenModule (GenUnit UnitId) -&gt; OccName -&gt; SrcSpan -&gt; Name
</span><a href="GHC.Types.Name.html#mkExternalName"><span class="hs-identifier hs-var">mkExternalName</span></a></span><span> </span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681090554"><span class="hs-identifier hs-var">uniq</span></a></span><span> </span><span class="annot"><span class="annottext">GenModule (GenUnit UnitId)
</span><a href="#local-6989586621681090560"><span class="hs-identifier hs-var">mod</span></a></span><span> </span><span class="annot"><span class="annottext">OccName
</span><a href="#local-6989586621681090561"><span class="hs-identifier hs-var">occ</span></a></span><span> </span><span class="annot"><span class="annottext">SrcSpan
</span><a href="GHC.Types.SrcLoc.html#noSrcSpan"><span class="hs-identifier hs-var">noSrcSpan</span></a></span><span>
</span><span id="line-327"></span><span>                   </span><span id="local-6989586621681090548"><span class="annot"><span class="annottext">new_cache :: OrigNameCache
</span><a href="#local-6989586621681090548"><span class="hs-identifier hs-var hs-var">new_cache</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">OrigNameCache
-&gt; GenModule (GenUnit UnitId) -&gt; OccName -&gt; Name -&gt; OrigNameCache
</span><a href="GHC.Types.Name.Cache.html#extendNameCache"><span class="hs-identifier hs-var">extendNameCache</span></a></span><span> </span><span class="annot"><span class="annottext">OrigNameCache
</span><a href="#local-6989586621681090558"><span class="hs-identifier hs-var">cache</span></a></span><span> </span><span class="annot"><span class="annottext">GenModule (GenUnit UnitId)
</span><a href="#local-6989586621681090560"><span class="hs-identifier hs-var">mod</span></a></span><span> </span><span class="annot"><span class="annottext">OccName
</span><a href="#local-6989586621681090561"><span class="hs-identifier hs-var">occ</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090550"><span class="hs-identifier hs-var">name</span></a></span><span>
</span><span id="line-328"></span><span>               </span><span class="hs-keyword">in</span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><span class="annottext">NameCache
</span><a href="#local-6989586621681090564"><span class="hs-identifier hs-var">nc</span></a></span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">nsUniqs :: UniqSupply
</span><a href="GHC.Types.Name.Cache.html#nsUniqs"><span class="hs-identifier hs-var">nsUniqs</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">UniqSupply
</span><a href="#local-6989586621681090553"><span class="hs-identifier hs-var">us</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">nsNames :: OrigNameCache
</span><a href="GHC.Types.Name.Cache.html#nsNames"><span class="hs-identifier hs-var">nsNames</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">OrigNameCache
</span><a href="#local-6989586621681090548"><span class="hs-identifier hs-var">new_cache</span></a></span><span> </span><span class="hs-special">}</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090550"><span class="hs-identifier hs-var">name</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-329"></span><span>
</span><span id="line-330"></span><span id="local-6989586621681091137"><span class="annot"><a href="GHC.Iface.Binary.html#serialiseName"><span class="hs-identifier hs-type">serialiseName</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#BinHandle"><span class="hs-identifier hs-type">BinHandle</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Unique.FM.html#UniqFM"><span class="hs-identifier hs-type">UniqFM</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681091137"><span class="hs-identifier hs-type">key</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">,</span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span></span><span>
</span><span id="line-331"></span><span id="serialiseName"><span class="annot"><span class="annottext">serialiseName :: forall key. BinHandle -&gt; Name -&gt; UniqFM key (Int, Name) -&gt; IO ()
</span><a href="GHC.Iface.Binary.html#serialiseName"><span class="hs-identifier hs-var hs-var">serialiseName</span></a></span></span><span> </span><span id="local-6989586621681090542"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090542"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span id="local-6989586621681090541"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090541"><span class="hs-identifier hs-var">name</span></a></span></span><span> </span><span class="annot"><span class="annottext">UniqFM key (Int, Name)
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-332"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681090534"><span class="annot"><span class="annottext">mod :: GenModule (GenUnit UnitId)
</span><a href="#local-6989586621681090534"><span class="hs-identifier hs-var hs-var">mod</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier">ASSERT2</span><span class="hs-special">(</span><span> </span><span class="hs-identifier">isExternalName</span><span> </span><span class="hs-identifier">name</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">ppr</span><span> </span><span class="hs-identifier">name</span><span> </span><span class="hs-special">)</span><span> </span><span class="hs-identifier">nameModule</span><span> </span><span class="hs-identifier">name</span><span>
</span><span id="line-333"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; OnDiskName -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090542"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GenModule (GenUnit UnitId) -&gt; GenUnit UnitId
forall unit. GenModule unit -&gt; unit
</span><a href="GHC.Unit.Types.html#moduleUnit"><span class="hs-identifier hs-var hs-var">moduleUnit</span></a></span><span> </span><span class="annot"><span class="annottext">GenModule (GenUnit UnitId)
</span><a href="#local-6989586621681090534"><span class="hs-identifier hs-var">mod</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">GenModule (GenUnit UnitId) -&gt; ModuleName
forall unit. GenModule unit -&gt; ModuleName
</span><a href="GHC.Unit.Types.html#moduleName"><span class="hs-identifier hs-var hs-var">moduleName</span></a></span><span> </span><span class="annot"><span class="annottext">GenModule (GenUnit UnitId)
</span><a href="#local-6989586621681090534"><span class="hs-identifier hs-var">mod</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Name -&gt; OccName
</span><a href="GHC.Types.Name.html#nameOccName"><span class="hs-identifier hs-var">nameOccName</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090541"><span class="hs-identifier hs-var">name</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-334"></span><span>
</span><span id="line-335"></span><span>
</span><span id="line-336"></span><span class="hs-comment">-- Note [Symbol table representation of names]</span><span>
</span><span id="line-337"></span><span class="hs-comment">-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</span><span>
</span><span id="line-338"></span><span class="hs-comment">--</span><span>
</span><span id="line-339"></span><span class="hs-comment">-- An occurrence of a name in an interface file is serialized as a single 32-bit</span><span>
</span><span id="line-340"></span><span class="hs-comment">-- word. The format of this word is:</span><span>
</span><span id="line-341"></span><span class="hs-comment">--  00xxxxxx xxxxxxxx xxxxxxxx xxxxxxxx</span><span>
</span><span id="line-342"></span><span class="hs-comment">--   A normal name. x is an index into the symbol table</span><span>
</span><span id="line-343"></span><span class="hs-comment">--  10xxxxxx xxyyyyyy yyyyyyyy yyyyyyyy</span><span>
</span><span id="line-344"></span><span class="hs-comment">--   A known-key name. x is the Unique's Char, y is the int part. We assume that</span><span>
</span><span id="line-345"></span><span class="hs-comment">--   all known-key uniques fit in this space. This is asserted by</span><span>
</span><span id="line-346"></span><span class="hs-comment">--   GHC.Builtin.Utils.knownKeyNamesOkay.</span><span>
</span><span id="line-347"></span><span class="hs-comment">--</span><span>
</span><span id="line-348"></span><span class="hs-comment">-- During serialization we check for known-key things using isKnownKeyName.</span><span>
</span><span id="line-349"></span><span class="hs-comment">-- During deserialization we use lookupKnownKeyName to get from the unique back</span><span>
</span><span id="line-350"></span><span class="hs-comment">-- to its corresponding Name.</span><span>
</span><span id="line-351"></span><span>
</span><span id="line-352"></span><span>
</span><span id="line-353"></span><span class="hs-comment">-- See Note [Symbol table representation of names]</span><span>
</span><span id="line-354"></span><span class="annot"><a href="GHC.Iface.Binary.html#putName"><span class="hs-identifier hs-type">putName</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Iface.Binary.html#BinDictionary"><span class="hs-identifier hs-type">BinDictionary</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Iface.Binary.html#BinSymbolTable"><span class="hs-identifier hs-type">BinSymbolTable</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#BinHandle"><span class="hs-identifier hs-type">BinHandle</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><span id="line-355"></span><span id="putName"><span class="annot"><span class="annottext">putName :: BinDictionary -&gt; BinSymbolTable -&gt; BinHandle -&gt; Name -&gt; IO ()
</span><a href="GHC.Iface.Binary.html#putName"><span class="hs-identifier hs-var hs-var">putName</span></a></span></span><span> </span><span id="local-6989586621681090524"><span class="annot"><span class="annottext">BinDictionary
</span><a href="#local-6989586621681090524"><span class="hs-identifier hs-var">_dict</span></a></span></span><span> </span><span class="annot"><a href="GHC.Iface.Binary.html#BinSymbolTable"><span class="hs-identifier hs-type">BinSymbolTable</span></a></span><span class="hs-special">{</span><span>
</span><span id="line-356"></span><span>               </span><span class="annot"><span class="annottext">bin_symtab_map :: BinSymbolTable -&gt; IORef (UniqFM Name (Int, Name))
</span><a href="GHC.Iface.Binary.html#bin_symtab_map"><span class="hs-identifier hs-var">bin_symtab_map</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621681090523"><span class="annot"><span class="annottext">IORef (UniqFM Name (Int, Name))
</span><a href="#local-6989586621681090523"><span class="hs-identifier hs-var">symtab_map_ref</span></a></span></span><span class="hs-special">,</span><span>
</span><span id="line-357"></span><span>               </span><span class="annot"><span class="annottext">bin_symtab_next :: BinSymbolTable -&gt; FastMutInt
</span><a href="GHC.Iface.Binary.html#bin_symtab_next"><span class="hs-identifier hs-var">bin_symtab_next</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621681090522"><span class="annot"><span class="annottext">FastMutInt
</span><a href="#local-6989586621681090522"><span class="hs-identifier hs-var">symtab_next</span></a></span></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-358"></span><span>        </span><span id="local-6989586621681090521"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090521"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span id="local-6989586621681090520"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090520"><span class="hs-identifier hs-var">name</span></a></span></span><span>
</span><span id="line-359"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Name -&gt; Bool
</span><a href="GHC.Builtin.Utils.html#isKnownKeyName"><span class="hs-identifier hs-var">isKnownKeyName</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090520"><span class="hs-identifier hs-var">name</span></a></span><span>
</span><span id="line-360"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="hs-keyword">let</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681090519"><span class="annot"><span class="annottext">Char
</span><a href="#local-6989586621681090519"><span class="hs-identifier hs-var">c</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681090518"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090518"><span class="hs-identifier hs-var">u</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Unique -&gt; (Char, Int)
</span><a href="GHC.Types.Unique.html#unpkUnique"><span class="hs-identifier hs-var">unpkUnique</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Name -&gt; Unique
</span><a href="GHC.Types.Name.html#nameUnique"><span class="hs-identifier hs-var">nameUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090520"><span class="hs-identifier hs-var">name</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-comment">-- INVARIANT: (ord c) fits in 8 bits</span><span>
</span><span id="line-361"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-comment">-- ASSERT(u &lt; 2^(22 :: Int))</span><span>
</span><span id="line-362"></span><span>    </span><span class="annot"><span class="annottext">BinHandle -&gt; Word32 -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090521"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Word32
</span><span class="hs-number">0x80000000</span></span><span>
</span><span id="line-363"></span><span>             </span><span class="annot"><span class="annottext">Word32 -&gt; Word32 -&gt; Word32
forall a. Bits a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/Data.Bits.html#.%7C."><span class="hs-operator hs-var">.|.</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Word32
forall a b. (Integral a, Num b) =&gt; a -&gt; b
</span><a href="../../base/src/GHC.Real.html#fromIntegral"><span class="hs-identifier hs-var">fromIntegral</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Char -&gt; Int
</span><a href="../../base/src/GHC.Base.html#ord"><span class="hs-identifier hs-var">ord</span></a></span><span> </span><span class="annot"><span class="annottext">Char
</span><a href="#local-6989586621681090519"><span class="hs-identifier hs-var">c</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Word32 -&gt; Int -&gt; Word32
forall a. Bits a =&gt; a -&gt; Int -&gt; a
</span><a href="../../base/src/Data.Bits.html#shiftL"><span class="hs-operator hs-var">`shiftL`</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">22</span></span><span class="hs-special">)</span><span>
</span><span id="line-364"></span><span>             </span><span class="annot"><span class="annottext">Word32 -&gt; Word32 -&gt; Word32
forall a. Bits a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/Data.Bits.html#.%7C."><span class="hs-operator hs-var">.|.</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Word32
forall a b. (Integral a, Num b) =&gt; a -&gt; b
</span><a href="../../base/src/GHC.Real.html#fromIntegral"><span class="hs-identifier hs-var">fromIntegral</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090518"><span class="hs-identifier hs-var">u</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/GHC.Word.html#Word32"><span class="hs-identifier hs-type">Word32</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-365"></span><span>
</span><span id="line-366"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>
</span><span id="line-367"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span> </span><span id="local-6989586621681090512"><span class="annot"><span class="annottext">UniqFM Name (Int, Name)
</span><a href="#local-6989586621681090512"><span class="hs-identifier hs-var">symtab_map</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">IORef (UniqFM Name (Int, Name)) -&gt; IO (UniqFM Name (Int, Name))
forall a. IORef a -&gt; IO a
</span><a href="../../base/src/GHC.IORef.html#readIORef"><span class="hs-identifier hs-var">readIORef</span></a></span><span> </span><span class="annot"><span class="annottext">IORef (UniqFM Name (Int, Name))
</span><a href="#local-6989586621681090523"><span class="hs-identifier hs-var">symtab_map_ref</span></a></span><span>
</span><span id="line-368"></span><span>       </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">UniqFM Name (Int, Name) -&gt; Name -&gt; Maybe (Int, Name)
forall key elt. Uniquable key =&gt; UniqFM key elt -&gt; key -&gt; Maybe elt
</span><a href="GHC.Types.Unique.FM.html#lookupUFM"><span class="hs-identifier hs-var">lookupUFM</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM Name (Int, Name)
</span><a href="#local-6989586621681090512"><span class="hs-identifier hs-var">symtab_map</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090520"><span class="hs-identifier hs-var">name</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-369"></span><span>         </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681090510"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090510"><span class="hs-identifier hs-var">off</span></a></span></span><span class="hs-special">,</span><span class="annot"><span class="annottext">Name
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; Word32 -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090521"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Word32
forall a b. (Integral a, Num b) =&gt; a -&gt; b
</span><a href="../../base/src/GHC.Real.html#fromIntegral"><span class="hs-identifier hs-var">fromIntegral</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090510"><span class="hs-identifier hs-var">off</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/GHC.Word.html#Word32"><span class="hs-identifier hs-type">Word32</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-370"></span><span>         </span><span class="annot"><span class="annottext">Maybe (Int, Name)
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-371"></span><span>            </span><span id="local-6989586621681090509"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090509"><span class="hs-identifier hs-var">off</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">FastMutInt -&gt; IO Int
</span><a href="GHC.Data.FastMutInt.html#readFastMutInt"><span class="hs-identifier hs-var">readFastMutInt</span></a></span><span> </span><span class="annot"><span class="annottext">FastMutInt
</span><a href="#local-6989586621681090522"><span class="hs-identifier hs-var">symtab_next</span></a></span><span>
</span><span id="line-372"></span><span>            </span><span class="hs-comment">-- MASSERT(off &lt; 2^(30 :: Int))</span><span>
</span><span id="line-373"></span><span>            </span><span class="annot"><span class="annottext">FastMutInt -&gt; Int -&gt; IO ()
</span><a href="GHC.Data.FastMutInt.html#writeFastMutInt"><span class="hs-identifier hs-var">writeFastMutInt</span></a></span><span> </span><span class="annot"><span class="annottext">FastMutInt
</span><a href="#local-6989586621681090522"><span class="hs-identifier hs-var">symtab_next</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090509"><span class="hs-identifier hs-var">off</span></a></span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2B"><span class="hs-operator hs-var">+</span></a></span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">)</span><span>
</span><span id="line-374"></span><span>            </span><span class="annot"><span class="annottext">IORef (UniqFM Name (Int, Name)) -&gt; UniqFM Name (Int, Name) -&gt; IO ()
forall a. IORef a -&gt; a -&gt; IO ()
</span><a href="../../base/src/GHC.IORef.html#writeIORef"><span class="hs-identifier hs-var">writeIORef</span></a></span><span> </span><span class="annot"><span class="annottext">IORef (UniqFM Name (Int, Name))
</span><a href="#local-6989586621681090523"><span class="hs-identifier hs-var">symtab_map_ref</span></a></span><span>
</span><span id="line-375"></span><span>                </span><span class="annot"><span class="annottext">(UniqFM Name (Int, Name) -&gt; IO ())
-&gt; UniqFM Name (Int, Name) -&gt; IO ()
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM Name (Int, Name)
-&gt; Name -&gt; (Int, Name) -&gt; UniqFM Name (Int, Name)
forall key elt.
Uniquable key =&gt;
UniqFM key elt -&gt; key -&gt; elt -&gt; UniqFM key elt
</span><a href="GHC.Types.Unique.FM.html#addToUFM"><span class="hs-identifier hs-var">addToUFM</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM Name (Int, Name)
</span><a href="#local-6989586621681090512"><span class="hs-identifier hs-var">symtab_map</span></a></span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090520"><span class="hs-identifier hs-var">name</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090509"><span class="hs-identifier hs-var">off</span></a></span><span class="hs-special">,</span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090520"><span class="hs-identifier hs-var">name</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-376"></span><span>            </span><span class="annot"><span class="annottext">BinHandle -&gt; Word32 -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090521"><span class="hs-identifier hs-var">bh</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Word32
forall a b. (Integral a, Num b) =&gt; a -&gt; b
</span><a href="../../base/src/GHC.Real.html#fromIntegral"><span class="hs-identifier hs-var">fromIntegral</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090509"><span class="hs-identifier hs-var">off</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/GHC.Word.html#Word32"><span class="hs-identifier hs-type">Word32</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-377"></span><span>
</span><span id="line-378"></span><span class="hs-comment">-- See Note [Symbol table representation of names]</span><span>
</span><span id="line-379"></span><span class="annot"><a href="GHC.Iface.Binary.html#getSymtabName"><span class="hs-identifier hs-type">getSymtabName</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Iface.Env.html#NameCacheUpdater"><span class="hs-identifier hs-type">NameCacheUpdater</span></a></span><span>
</span><span id="line-380"></span><span>              </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#Dictionary"><span class="hs-identifier hs-type">Dictionary</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#SymbolTable"><span class="hs-identifier hs-type">SymbolTable</span></a></span><span>
</span><span id="line-381"></span><span>              </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#BinHandle"><span class="hs-identifier hs-type">BinHandle</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span>
</span><span id="line-382"></span><span id="getSymtabName"><span class="annot"><span class="annottext">getSymtabName :: NameCacheUpdater
-&gt; Dictionary -&gt; SymbolTable -&gt; BinHandle -&gt; IO Name
</span><a href="GHC.Iface.Binary.html#getSymtabName"><span class="hs-identifier hs-var hs-var">getSymtabName</span></a></span></span><span> </span><span id="local-6989586621681090504"><span class="annot"><span class="annottext">NameCacheUpdater
</span><a href="#local-6989586621681090504"><span class="hs-identifier hs-var">_ncu</span></a></span></span><span> </span><span id="local-6989586621681090503"><span class="annot"><span class="annottext">Dictionary
</span><a href="#local-6989586621681090503"><span class="hs-identifier hs-var">_dict</span></a></span></span><span> </span><span id="local-6989586621681090502"><span class="annot"><span class="annottext">SymbolTable
</span><a href="#local-6989586621681090502"><span class="hs-identifier hs-var">symtab</span></a></span></span><span> </span><span id="local-6989586621681090501"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090501"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-383"></span><span>    </span><span id="local-6989586621681090500"><span class="annot"><span class="annottext">Word32
</span><a href="#local-6989586621681090500"><span class="hs-identifier hs-var">i</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/GHC.Word.html#Word32"><span class="hs-identifier hs-type">Word32</span></a></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO Word32
forall a. Binary a =&gt; BinHandle -&gt; IO a
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var">get</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090501"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-384"></span><span>    </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Word32
</span><a href="#local-6989586621681090500"><span class="hs-identifier hs-var">i</span></a></span><span> </span><span class="annot"><span class="annottext">Word32 -&gt; Word32 -&gt; Word32
forall a. Bits a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/Data.Bits.html#.%26."><span class="hs-operator hs-var">.&amp;.</span></a></span><span> </span><span class="annot"><span class="annottext">Word32
</span><span class="hs-number">0xC0000000</span></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-385"></span><span>      </span><span class="annot"><span class="annottext">Word32
</span><span class="hs-number">0x00000000</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Name -&gt; IO Name
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(Name -&gt; IO Name) -&gt; Name -&gt; IO Name
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">SymbolTable
</span><a href="#local-6989586621681090502"><span class="hs-identifier hs-var">symtab</span></a></span><span> </span><span class="annot"><span class="annottext">SymbolTable -&gt; Int -&gt; Name
forall i e. Ix i =&gt; Array i e -&gt; i -&gt; e
</span><a href="../../base/src/GHC.Arr.html#%21"><span class="hs-operator hs-var">!</span></a></span><span> </span><span class="annot"><span class="annottext">Word32 -&gt; Int
forall a b. (Integral a, Num b) =&gt; a -&gt; b
</span><a href="../../base/src/GHC.Real.html#fromIntegral"><span class="hs-identifier hs-var">fromIntegral</span></a></span><span> </span><span class="annot"><span class="annottext">Word32
</span><a href="#local-6989586621681090500"><span class="hs-identifier hs-var">i</span></a></span><span>
</span><span id="line-386"></span><span>
</span><span id="line-387"></span><span>      </span><span class="annot"><span class="annottext">Word32
</span><span class="hs-number">0x80000000</span></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-388"></span><span>        </span><span class="hs-keyword">let</span><span>
</span><span id="line-389"></span><span>          </span><span id="local-6989586621681090492"><span class="annot"><span class="annottext">tag :: Char
</span><a href="#local-6989586621681090492"><span class="hs-identifier hs-var hs-var">tag</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int -&gt; Char
</span><a href="../../base/src/GHC.Char.html#chr"><span class="hs-identifier hs-var">chr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Word32 -&gt; Int
forall a b. (Integral a, Num b) =&gt; a -&gt; b
</span><a href="../../base/src/GHC.Real.html#fromIntegral"><span class="hs-identifier hs-var">fromIntegral</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="annot"><span class="annottext">Word32
</span><a href="#local-6989586621681090500"><span class="hs-identifier hs-var">i</span></a></span><span> </span><span class="annot"><span class="annottext">Word32 -&gt; Word32 -&gt; Word32
forall a. Bits a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/Data.Bits.html#.%26."><span class="hs-operator hs-var">.&amp;.</span></a></span><span> </span><span class="annot"><span class="annottext">Word32
</span><span class="hs-number">0x3FC00000</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Word32 -&gt; Int -&gt; Word32
forall a. Bits a =&gt; a -&gt; Int -&gt; a
</span><a href="../../base/src/Data.Bits.html#shiftR"><span class="hs-operator hs-var">`shiftR`</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">22</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-390"></span><span>          </span><span id="local-6989586621681090484"><span class="annot"><span class="annottext">ix :: Int
</span><a href="#local-6989586621681090484"><span class="hs-identifier hs-var hs-var">ix</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Word32 -&gt; Int
forall a b. (Integral a, Num b) =&gt; a -&gt; b
</span><a href="../../base/src/GHC.Real.html#fromIntegral"><span class="hs-identifier hs-var">fromIntegral</span></a></span><span> </span><span class="annot"><span class="annottext">Word32
</span><a href="#local-6989586621681090500"><span class="hs-identifier hs-var">i</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Bits a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/Data.Bits.html#.%26."><span class="hs-operator hs-var">.&amp;.</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0x003FFFFF</span></span><span>
</span><span id="line-391"></span><span>          </span><span id="local-6989586621681090483"><span class="annot"><span class="annottext">u :: Unique
</span><a href="#local-6989586621681090483"><span class="hs-identifier hs-var hs-var">u</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Char -&gt; Int -&gt; Unique
</span><a href="GHC.Types.Unique.html#mkUnique"><span class="hs-identifier hs-var">mkUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Char
</span><a href="#local-6989586621681090492"><span class="hs-identifier hs-var">tag</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090484"><span class="hs-identifier hs-var">ix</span></a></span><span>
</span><span id="line-392"></span><span>        </span><span class="hs-keyword">in</span><span>
</span><span id="line-393"></span><span>          </span><span class="annot"><span class="annottext">Name -&gt; IO Name
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(Name -&gt; IO Name) -&gt; Name -&gt; IO Name
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Unique -&gt; Maybe Name
</span><a href="GHC.Builtin.Utils.html#lookupKnownKeyName"><span class="hs-identifier hs-var">lookupKnownKeyName</span></a></span><span> </span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681090483"><span class="hs-identifier hs-var">u</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-394"></span><span>                      </span><span class="annot"><span class="annottext">Maybe Name
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc -&gt; Name
forall a. HasCallStack =&gt; String -&gt; SDoc -&gt; a
</span><a href="GHC.Utils.Outputable.html#pprPanic"><span class="hs-identifier hs-var">pprPanic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;getSymtabName:unknown known-key unique&quot;</span></span><span>
</span><span id="line-395"></span><span>                                          </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Word32 -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Word32
</span><a href="#local-6989586621681090500"><span class="hs-identifier hs-var">i</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%24%24"><span class="hs-operator hs-var">$$</span></a></span><span> </span><span class="annot"><span class="annottext">(Char, Int) -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Unique -&gt; (Char, Int)
</span><a href="GHC.Types.Unique.html#unpkUnique"><span class="hs-identifier hs-var">unpkUnique</span></a></span><span> </span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681090483"><span class="hs-identifier hs-var">u</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-396"></span><span>                      </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span id="local-6989586621681090479"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090479"><span class="hs-identifier hs-var">n</span></a></span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621681090479"><span class="hs-identifier hs-var">n</span></a></span><span>
</span><span id="line-397"></span><span>
</span><span id="line-398"></span><span>      </span><span class="annot"><span class="annottext">Word32
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc -&gt; IO Name
forall a. HasCallStack =&gt; String -&gt; SDoc -&gt; a
</span><a href="GHC.Utils.Outputable.html#pprPanic"><span class="hs-identifier hs-var">pprPanic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;getSymtabName:unknown name tag&quot;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Word32 -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Word32
</span><a href="#local-6989586621681090500"><span class="hs-identifier hs-var">i</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-399"></span><span>
</span><span id="line-400"></span><span class="hs-keyword">data</span><span> </span><span id="BinSymbolTable"><span class="annot"><a href="GHC.Iface.Binary.html#BinSymbolTable"><span class="hs-identifier hs-var">BinSymbolTable</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="BinSymbolTable"><span class="annot"><a href="GHC.Iface.Binary.html#BinSymbolTable"><span class="hs-identifier hs-var">BinSymbolTable</span></a></span></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-401"></span><span>        </span><span id="bin_symtab_next"><span class="annot"><span class="annottext">BinSymbolTable -&gt; FastMutInt
</span><a href="GHC.Iface.Binary.html#bin_symtab_next"><span class="hs-identifier hs-var hs-var">bin_symtab_next</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="annot"><a href="GHC.Data.FastMutInt.html#FastMutInt"><span class="hs-identifier hs-type">FastMutInt</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-comment">-- The next index to use</span><span>
</span><span id="line-402"></span><span>        </span><span id="bin_symtab_map"><span class="annot"><span class="annottext">BinSymbolTable -&gt; IORef (UniqFM Name (Int, Name))
</span><a href="GHC.Iface.Binary.html#bin_symtab_map"><span class="hs-identifier hs-var hs-var">bin_symtab_map</span></a></span></span><span>  </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="hs-special">(</span><span class="annot"><a href="../../base/src/GHC.IORef.html#IORef"><span class="hs-identifier hs-type">IORef</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Unique.FM.html#UniqFM"><span class="hs-identifier hs-type">UniqFM</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">,</span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-403"></span><span>                                </span><span class="hs-comment">-- indexed by Name</span><span>
</span><span id="line-404"></span><span>  </span><span class="hs-special">}</span><span>
</span><span id="line-405"></span><span>
</span><span id="line-406"></span><span class="annot"><a href="GHC.Iface.Binary.html#putFastString"><span class="hs-identifier hs-type">putFastString</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Iface.Binary.html#BinDictionary"><span class="hs-identifier hs-type">BinDictionary</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#BinHandle"><span class="hs-identifier hs-type">BinHandle</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Data.FastString.html#FastString"><span class="hs-identifier hs-type">FastString</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>
</span><span id="line-407"></span><span id="putFastString"><span class="annot"><span class="annottext">putFastString :: BinDictionary -&gt; BinHandle -&gt; FastString -&gt; IO ()
</span><a href="GHC.Iface.Binary.html#putFastString"><span class="hs-identifier hs-var hs-var">putFastString</span></a></span></span><span> </span><span id="local-6989586621681090478"><span class="annot"><span class="annottext">BinDictionary
</span><a href="#local-6989586621681090478"><span class="hs-identifier hs-var">dict</span></a></span></span><span> </span><span id="local-6989586621681090477"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090477"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span id="local-6989586621681090476"><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681090476"><span class="hs-identifier hs-var">fs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BinDictionary -&gt; FastString -&gt; IO Word32
</span><a href="GHC.Iface.Binary.html#allocateFastString"><span class="hs-identifier hs-var">allocateFastString</span></a></span><span> </span><span class="annot"><span class="annottext">BinDictionary
</span><a href="#local-6989586621681090478"><span class="hs-identifier hs-var">dict</span></a></span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681090476"><span class="hs-identifier hs-var">fs</span></a></span><span> </span><span class="annot"><span class="annottext">IO Word32 -&gt; (Word32 -&gt; IO ()) -&gt; IO ()
forall (m :: * -&gt; *) a b. Monad m =&gt; m a -&gt; (a -&gt; m b) -&gt; m b
</span><a href="../../base/src/GHC.Base.html#%3E%3E%3D"><span class="hs-operator hs-var">&gt;&gt;=</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; Word32 -&gt; IO ()
forall a. Binary a =&gt; BinHandle -&gt; a -&gt; IO ()
</span><a href="GHC.Utils.Binary.html#put_"><span class="hs-identifier hs-var">put_</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090477"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-408"></span><span>
</span><span id="line-409"></span><span class="annot"><a href="GHC.Iface.Binary.html#allocateFastString"><span class="hs-identifier hs-type">allocateFastString</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Iface.Binary.html#BinDictionary"><span class="hs-identifier hs-type">BinDictionary</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Data.FastString.html#FastString"><span class="hs-identifier hs-type">FastString</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="annot"><a href="../../base/src/GHC.Word.html#Word32"><span class="hs-identifier hs-type">Word32</span></a></span><span>
</span><span id="line-410"></span><span id="allocateFastString"><span class="annot"><span class="annottext">allocateFastString :: BinDictionary -&gt; FastString -&gt; IO Word32
</span><a href="GHC.Iface.Binary.html#allocateFastString"><span class="hs-identifier hs-var hs-var">allocateFastString</span></a></span></span><span> </span><span class="annot"><a href="GHC.Iface.Binary.html#BinDictionary"><span class="hs-identifier hs-type">BinDictionary</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">bin_dict_next :: BinDictionary -&gt; FastMutInt
</span><a href="GHC.Iface.Binary.html#bin_dict_next"><span class="hs-identifier hs-var">bin_dict_next</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621681090474"><span class="annot"><span class="annottext">FastMutInt
</span><a href="#local-6989586621681090474"><span class="hs-identifier hs-var">j_r</span></a></span></span><span class="hs-special">,</span><span>
</span><span id="line-411"></span><span>                                   </span><span class="annot"><span class="annottext">bin_dict_map :: BinDictionary -&gt; IORef (UniqFM FastString (Int, FastString))
</span><a href="GHC.Iface.Binary.html#bin_dict_map"><span class="hs-identifier hs-var">bin_dict_map</span></a></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621681090473"><span class="annot"><span class="annottext">IORef (UniqFM FastString (Int, FastString))
</span><a href="#local-6989586621681090473"><span class="hs-identifier hs-var">out_r</span></a></span></span><span class="hs-special">}</span><span> </span><span id="local-6989586621681090472"><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681090472"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-412"></span><span>    </span><span id="local-6989586621681090471"><span class="annot"><span class="annottext">UniqFM FastString (Int, FastString)
</span><a href="#local-6989586621681090471"><span class="hs-identifier hs-var">out</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">IORef (UniqFM FastString (Int, FastString))
-&gt; IO (UniqFM FastString (Int, FastString))
forall a. IORef a -&gt; IO a
</span><a href="../../base/src/GHC.IORef.html#readIORef"><span class="hs-identifier hs-var">readIORef</span></a></span><span> </span><span class="annot"><span class="annottext">IORef (UniqFM FastString (Int, FastString))
</span><a href="#local-6989586621681090473"><span class="hs-identifier hs-var">out_r</span></a></span><span>
</span><span id="line-413"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621681090468"><span class="annot"><span class="annottext">uniq :: Unique
</span><a href="#local-6989586621681090468"><span class="hs-identifier hs-var hs-var">uniq</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">FastString -&gt; Unique
forall a. Uniquable a =&gt; a -&gt; Unique
</span><a href="GHC.Types.Unique.html#getUnique"><span class="hs-identifier hs-var">getUnique</span></a></span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681090472"><span class="hs-identifier hs-var">f</span></a></span><span>
</span><span id="line-414"></span><span>    </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">UniqFM FastString (Int, FastString)
-&gt; Unique -&gt; Maybe (Int, FastString)
forall key elt. UniqFM key elt -&gt; Unique -&gt; Maybe elt
</span><a href="GHC.Types.Unique.FM.html#lookupUFM_Directly"><span class="hs-identifier hs-var">lookupUFM_Directly</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM FastString (Int, FastString)
</span><a href="#local-6989586621681090471"><span class="hs-identifier hs-var">out</span></a></span><span> </span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681090468"><span class="hs-identifier hs-var">uniq</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-415"></span><span>        </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681090465"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090465"><span class="hs-identifier hs-var">j</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">FastString
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Word32 -&gt; IO Word32
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Word32
forall a b. (Integral a, Num b) =&gt; a -&gt; b
</span><a href="../../base/src/GHC.Real.html#fromIntegral"><span class="hs-identifier hs-var">fromIntegral</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090465"><span class="hs-identifier hs-var">j</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/GHC.Word.html#Word32"><span class="hs-identifier hs-type">Word32</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-416"></span><span>        </span><span class="annot"><span class="annottext">Maybe (Int, FastString)
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-417"></span><span>           </span><span id="local-6989586621681090464"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090464"><span class="hs-identifier hs-var">j</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">FastMutInt -&gt; IO Int
</span><a href="GHC.Data.FastMutInt.html#readFastMutInt"><span class="hs-identifier hs-var">readFastMutInt</span></a></span><span> </span><span class="annot"><span class="annottext">FastMutInt
</span><a href="#local-6989586621681090474"><span class="hs-identifier hs-var">j_r</span></a></span><span>
</span><span id="line-418"></span><span>           </span><span class="annot"><span class="annottext">FastMutInt -&gt; Int -&gt; IO ()
</span><a href="GHC.Data.FastMutInt.html#writeFastMutInt"><span class="hs-identifier hs-var">writeFastMutInt</span></a></span><span> </span><span class="annot"><span class="annottext">FastMutInt
</span><a href="#local-6989586621681090474"><span class="hs-identifier hs-var">j_r</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090464"><span class="hs-identifier hs-var">j</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2B"><span class="hs-operator hs-var">+</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">)</span><span>
</span><span id="line-419"></span><span>           </span><span class="annot"><span class="annottext">IORef (UniqFM FastString (Int, FastString))
-&gt; UniqFM FastString (Int, FastString) -&gt; IO ()
forall a. IORef a -&gt; a -&gt; IO ()
</span><a href="../../base/src/GHC.IORef.html#writeIORef"><span class="hs-identifier hs-var">writeIORef</span></a></span><span> </span><span class="annot"><span class="annottext">IORef (UniqFM FastString (Int, FastString))
</span><a href="#local-6989586621681090473"><span class="hs-identifier hs-var">out_r</span></a></span><span> </span><span class="annot"><span class="annottext">(UniqFM FastString (Int, FastString) -&gt; IO ())
-&gt; UniqFM FastString (Int, FastString) -&gt; IO ()
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM FastString (Int, FastString)
-&gt; Unique
-&gt; (Int, FastString)
-&gt; UniqFM FastString (Int, FastString)
forall key elt. UniqFM key elt -&gt; Unique -&gt; elt -&gt; UniqFM key elt
</span><a href="GHC.Types.Unique.FM.html#addToUFM_Directly"><span class="hs-identifier hs-var">addToUFM_Directly</span></a></span><span> </span><span class="annot"><span class="annottext">UniqFM FastString (Int, FastString)
</span><a href="#local-6989586621681090471"><span class="hs-identifier hs-var">out</span></a></span><span> </span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681090468"><span class="hs-identifier hs-var">uniq</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090464"><span class="hs-identifier hs-var">j</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681090472"><span class="hs-identifier hs-var">f</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-420"></span><span>           </span><span class="annot"><span class="annottext">Word32 -&gt; IO Word32
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Word32
forall a b. (Integral a, Num b) =&gt; a -&gt; b
</span><a href="../../base/src/GHC.Real.html#fromIntegral"><span class="hs-identifier hs-var">fromIntegral</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681090464"><span class="hs-identifier hs-var">j</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/GHC.Word.html#Word32"><span class="hs-identifier hs-type">Word32</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-421"></span><span>
</span><span id="line-422"></span><span class="annot"><a href="GHC.Iface.Binary.html#getDictFastString"><span class="hs-identifier hs-type">getDictFastString</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#Dictionary"><span class="hs-identifier hs-type">Dictionary</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Binary.html#BinHandle"><span class="hs-identifier hs-type">BinHandle</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">IO</span></span><span> </span><span class="annot"><a href="GHC.Data.FastString.html#FastString"><span class="hs-identifier hs-type">FastString</span></a></span><span>
</span><span id="line-423"></span><span id="getDictFastString"><span class="annot"><span class="annottext">getDictFastString :: Dictionary -&gt; BinHandle -&gt; IO FastString
</span><a href="GHC.Iface.Binary.html#getDictFastString"><span class="hs-identifier hs-var hs-var">getDictFastString</span></a></span></span><span> </span><span id="local-6989586621681090462"><span class="annot"><span class="annottext">Dictionary
</span><a href="#local-6989586621681090462"><span class="hs-identifier hs-var">dict</span></a></span></span><span> </span><span id="local-6989586621681090461"><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090461"><span class="hs-identifier hs-var">bh</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-424"></span><span>    </span><span id="local-6989586621681090460"><span class="annot"><span class="annottext">Word32
</span><a href="#local-6989586621681090460"><span class="hs-identifier hs-var">j</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">BinHandle -&gt; IO Word32
forall a. Binary a =&gt; BinHandle -&gt; IO a
</span><a href="GHC.Utils.Binary.html#get"><span class="hs-identifier hs-var">get</span></a></span><span> </span><span class="annot"><span class="annottext">BinHandle
</span><a href="#local-6989586621681090461"><span class="hs-identifier hs-var">bh</span></a></span><span>
</span><span id="line-425"></span><span>    </span><span class="annot"><span class="annottext">FastString -&gt; IO FastString
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(FastString -&gt; IO FastString) -&gt; FastString -&gt; IO FastString
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Dictionary
</span><a href="#local-6989586621681090462"><span class="hs-identifier hs-var">dict</span></a></span><span> </span><span class="annot"><span class="annottext">Dictionary -&gt; Int -&gt; FastString
forall i e. Ix i =&gt; Array i e -&gt; i -&gt; e
</span><a href="../../base/src/GHC.Arr.html#%21"><span class="hs-operator hs-var">!</span></a></span><span> </span><span class="annot"><span class="annottext">Word32 -&gt; Int
forall a b. (Integral a, Num b) =&gt; a -&gt; b
</span><a href="../../base/src/GHC.Real.html#fromIntegral"><span class="hs-identifier hs-var">fromIntegral</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Word32
</span><a href="#local-6989586621681090460"><span class="hs-identifier hs-var">j</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/GHC.Word.html#Word32"><span class="hs-identifier hs-type">Word32</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-426"></span><span>
</span><span id="line-427"></span><span class="hs-keyword">data</span><span> </span><span id="BinDictionary"><span class="annot"><a href="GHC.Iface.Binary.html#BinDictionary"><span class="hs-identifier hs-var">BinDictionary</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="BinDictionary"><span class="annot"><a href="GHC.Iface.Binary.html#BinDictionary"><span class="hs-identifier hs-var">BinDictionary</span></a></span></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-428"></span><span>        </span><span id="bin_dict_next"><span class="annot"><span class="annottext">BinDictionary -&gt; FastMutInt
</span><a href="GHC.Iface.Binary.html#bin_dict_next"><span class="hs-identifier hs-var hs-var">bin_dict_next</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="annot"><a href="GHC.Data.FastMutInt.html#FastMutInt"><span class="hs-identifier hs-type">FastMutInt</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-comment">-- The next index to use</span><span>
</span><span id="line-429"></span><span>        </span><span id="bin_dict_map"><span class="annot"><span class="annottext">BinDictionary -&gt; IORef (UniqFM FastString (Int, FastString))
</span><a href="GHC.Iface.Binary.html#bin_dict_map"><span class="hs-identifier hs-var hs-var">bin_dict_map</span></a></span></span><span>  </span><span class="hs-glyph">::</span><span> </span><span class="hs-glyph">!</span><span class="hs-special">(</span><span class="annot"><a href="../../base/src/GHC.IORef.html#IORef"><span class="hs-identifier hs-type">IORef</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Unique.FM.html#UniqFM"><span class="hs-identifier hs-type">UniqFM</span></a></span><span> </span><span class="annot"><a href="GHC.Data.FastString.html#FastString"><span class="hs-identifier hs-type">FastString</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">,</span><span class="annot"><a href="GHC.Data.FastString.html#FastString"><span class="hs-identifier hs-type">FastString</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-430"></span><span>                                </span><span class="hs-comment">-- indexed by FastString</span><span>
</span><span id="line-431"></span><span>  </span><span class="hs-special">}</span><span>
</span><span id="line-432"></span><span>
</span><span id="line-433"></span><span class="annot"><a href="GHC.Iface.Binary.html#getWayDescr"><span class="hs-identifier hs-type">getWayDescr</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../containers/src/Data.Set.Internal.html#Set"><span class="hs-identifier hs-type">Set</span></a></span><span> </span><span class="annot"><a href="GHC.Driver.Ways.html#Way"><span class="hs-identifier hs-type">Way</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Base.html#String"><span class="hs-identifier hs-type">String</span></a></span><span>
</span><span id="line-434"></span><span id="getWayDescr"><span class="annot"><span class="annottext">getWayDescr :: Platform -&gt; Set Way -&gt; String
</span><a href="GHC.Iface.Binary.html#getWayDescr"><span class="hs-identifier hs-var hs-var">getWayDescr</span></a></span></span><span> </span><span id="local-6989586621681090459"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681090459"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span id="local-6989586621681090458"><span class="annot"><span class="annottext">Set Way
</span><a href="#local-6989586621681090458"><span class="hs-identifier hs-var">ws</span></a></span></span><span>
</span><span id="line-435"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Bool
</span><a href="../../ghc-boot/src/GHC.Platform.html#platformUnregisterised"><span class="hs-identifier hs-var hs-var">platformUnregisterised</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681090459"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Char
</span><span class="hs-char">'u'</span></span><span class="annot"><span class="annottext">Char -&gt; String -&gt; String
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090456"><span class="hs-identifier hs-var">tag</span></a></span><span>
</span><span id="line-436"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>                       </span><span class="hs-glyph">=</span><span>     </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621681090456"><span class="hs-identifier hs-var">tag</span></a></span><span>
</span><span id="line-437"></span><span>  </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681090456"><span class="annot"><span class="annottext">tag :: String
</span><a href="#local-6989586621681090456"><span class="hs-identifier hs-var hs-var">tag</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Set Way -&gt; String
</span><a href="GHC.Driver.Ways.html#waysBuildTag"><span class="hs-identifier hs-var">waysBuildTag</span></a></span><span> </span><span class="annot"><span class="annottext">Set Way
</span><a href="#local-6989586621681090458"><span class="hs-identifier hs-var">ws</span></a></span><span>
</span><span id="line-438"></span><span>        </span><span class="hs-comment">-- if this is an unregisterised build, make sure our interfaces</span><span>
</span><span id="line-439"></span><span>        </span><span class="hs-comment">-- can't be used by a registerised build.</span><span>
</span><span id="line-440"></span></pre></body></html>